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 NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z – NEMO

source: NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmicro.F90 @ 14276

Last change on this file since 14276 was 14276, checked in by aumont, 3 years ago

numerous updates to PISCES, PISCES-QUOTA and the sediment module

  • Property svn:keywords set to Id
File size: 26.3 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   !!   p5z_micro       :   Compute the sources/sinks for microzooplankton
12   !!   p5z_micro_init  :   Initialize and read the appropriate namelist
13   !!----------------------------------------------------------------------
14   USE oce_trc         !  shared variables between ocean and passive tracers
15   USE trc             !  passive tracers common variables
16   USE sms_pisces      !  PISCES Source Minus Sink variables
17   USE p4zlim          !  PISCES nutrient limitation term of PISCES std
18   USE p5zlim          !  Phytoplankton limitation terms
19   USE iom             !  I/O manager
20   USE prtctl_trc      !  print control for debugging
21
22   IMPLICIT NONE
23   PRIVATE
24
25   PUBLIC   p5z_micro         ! called in p5zbio.F90
26   PUBLIC   p5z_micro_init    ! called in trcsms_pisces.F90
27
28   !! * Shared module variables
29   REAL(wp), PUBLIC ::  part        !: part of calcite not dissolved in microzoo guts
30   REAL(wp), PUBLIC ::  xprefc     !: microzoo preference for POC
31   REAL(wp), PUBLIC ::  xprefn     !: microzoo preference for nanophyto
32   REAL(wp), PUBLIC ::  xprefp     !: microzoo preference for picophyto
33   REAL(wp), PUBLIC ::  xprefd     !: microzoo preference for diatoms
34   REAL(wp), PUBLIC ::  xprefz     !: microzoo preference for microzoo
35   REAL(wp), PUBLIC ::  xthreshdia  !: diatoms feeding threshold for microzooplankton
36   REAL(wp), PUBLIC ::  xthreshpic  !: picophyto feeding threshold for microzooplankton
37   REAL(wp), PUBLIC ::  xthreshphy  !: nanophyto threshold for microzooplankton
38   REAL(wp), PUBLIC ::  xthreshzoo  !: microzoo threshold for microzooplankton
39   REAL(wp), PUBLIC ::  xthreshpoc  !: poc threshold for microzooplankton
40   REAL(wp), PUBLIC ::  xthresh     !: feeding threshold for microzooplankton
41   REAL(wp), PUBLIC ::  resrat      !: exsudation rate of microzooplankton
42   REAL(wp), PUBLIC ::  mzrat       !: microzooplankton mortality rate
43   REAL(wp), PUBLIC ::  grazrat     !: maximal microzoo grazing rate
44   REAL(wp), PUBLIC ::  xkgraz      !: Half-saturation constant of assimilation
45   REAL(wp), PUBLIC ::  unassc      !: Non-assimilated part of food
46   REAL(wp), PUBLIC ::  unassn      !: Non-assimilated part of food
47   REAL(wp), PUBLIC ::  unassp      !: Non-assimilated part of food
48   REAL(wp), PUBLIC ::  epsher      !: Growth efficiency for microzoo
49   REAL(wp), PUBLIC ::  epshermin   !: Minimum growth efficiency for microzoo
50   REAL(wp), PUBLIC ::  srespir     !: half sturation constant for grazing 1
51   REAL(wp), PUBLIC ::  ssigma      !: Fraction excreted as semi-labile DOM
52   REAL(wp), PUBLIC ::  xsigma      !: Width of the grazing window
53   REAL(wp), PUBLIC ::  xsigmadel   !: Maximum additional width of the grazing window at low food density
54   LOGICAL,  PUBLIC ::  bmetexc     !: Use of excess carbon for respiration
55
56   !!----------------------------------------------------------------------
57   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
58   !! $Id$
59   !! Software governed by the CeCILL license (see ./LICENSE)
60   !!----------------------------------------------------------------------
61
62CONTAINS
63
64   SUBROUTINE p5z_micro( kt, knt )
65      !!---------------------------------------------------------------------
66      !!                     ***  ROUTINE p5z_micro  ***
67      !!
68      !! ** Purpose :   Compute the sources/sinks for microzooplankton
69      !!
70      !! ** Method  : - ???
71      !!---------------------------------------------------------------------
72      INTEGER, INTENT(in) ::  kt  ! ocean time step
73      INTEGER, INTENT(in) ::  knt 
74      !
75      INTEGER  :: ji, jj, jk
76      REAL(wp) :: zcompadi, zcompaz , zcompaph, zcompapoc, zcompapon, zcompapop
77      REAL(wp) :: zcompapi, zgraze  , zdenom, zfact, zfood, zfoodlim
78      REAL(wp) :: ztmp1, ztmp2, ztmp3, ztmp4, ztmp5, ztmptot
79      REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi
80      REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf, zbasresn, zbasresp, zbasresf
81      REAL(wp) :: zgradoc, zgradon, zgradop, zgraref, zgradoct, zgradont, zgradopt, zgrareft
82      REAL(wp) :: zexcess, zgraren, zgrarep, zgrarem
83      REAL(wp) :: zgrapoc, zgrapon, zgrapop, zgrapof, zprcaca, zmortz
84      REAL(wp) :: zrespz, ztortz, zgrasratf, zgrasratn, zgrasratp
85      REAL(wp) :: zgraznc, zgraznn, zgraznp, zgrazpoc, zgrazpon, zgrazpop, zgrazpof
86      REAL(wp) :: zgrazdc, zgrazdn, zgrazdp, zgrazdf, zgraznf, zgrazz
87      REAL(wp) :: zgrazpc, zgrazpn, zgrazpp, zgrazpf, zbeta, zrfact2, zmetexcess
88      REAL(wp) :: zsigma, zdiffdn, zdiffpn, zdiffdp, zproport, zproport2
89      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo
90      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d, zzligprod
91      CHARACTER (len=25) :: charout
92      !!---------------------------------------------------------------------
93      !
94      IF( ln_timing )   CALL timing_start('p5z_micro')
95      !
96      IF (ln_ligand) THEN
97         ALLOCATE( zzligprod(jpi,jpj,jpk) )
98         zzligprod(:,:,:) = 0._wp
99      ENDIF
100      !
101      ! Use of excess carbon for metabolism
102      zmetexcess = 0.0
103      IF ( bmetexc ) zmetexcess = 1.0
104      !
105      DO jk = 1, jpkm1
106         DO jj = 1, jpj
107            DO ji = 1, jpi
108               zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 )
109               zfact   = xstep * tgfunc2(ji,jj,jk) * zcompaz
110               ! Proportion of nano and diatoms that are within the size range
111               ! accessible to microzooplankton.
112               zproport  = min(sized(ji,jj,jk),1.8)**(-0.48)*min(1.0, exp(-1.1 * MAX(0., ( sized(ji,jj,jk) - 1.8 ))**0.8 ))
113               zproport2 = sizen(ji,jj,jk)**(-0.48)
114               zproport2 = 1.0
115               !  linear mortality of mesozooplankton
116               !  A michaelis menten modulation term is used to avoid extinction of
117               !  microzooplankton at very low food concentrations. Mortality is
118               !  enhanced in low O2 waters
119               !  -----------------------------------------------------------------
120               zrespz = resrat * zfact * ( trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) )  &
121               &        + 3. * nitrfac(ji,jj,jk) )
122
123               !  Zooplankton quadratic mortality. A square function has been selected with
124               !  to mimic predation and disease (density dependent mortality). It also tends
125               !  to stabilise the model
126               !  -------------------------------------------------------------------------
127               ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk))
128
129               !   Computation of the abundance of the preys
130               !   A threshold can be specified in the namelist
131               !   Nanophyto and diatoms have a specific treatment with
132               !   teir preference decreasing with size.
133               !   --------------------------------------------------------
134               zcompadi  = zproport * MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 )
135               zcompaph  = zproport2 * 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               ! The total amount of food is the sum of all preys accessible to mesozooplankton
142               ! multiplied by their food preference
143               ! A threshold can be specified in the namelist (xthresh). However, when food
144               ! concentration is close to this threshold, it is decreased to avoid the
145               ! accumulation of food in the mesozoopelagic domain
146               ! -------------------------------------------------------------------------------
147               zfood     = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi   &
148               &           + xprefz * zcompaz + xprefp * zcompapi
149               zfoodlim  = MAX( 0. , zfood - min(xthresh,0.5*zfood) )
150               zdenom    = zfoodlim / ( xkgraz + zfoodlim )
151               zgraze    = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 
152
153               ! An active switching parameterization is used here.
154               ! We don't use the KTW parameterization proposed by
155               ! Vallina et al. because it tends to produce too steady biomass
156               ! composition and the variance of Chl is too low as it grazes
157               ! too strongly on winning organisms. We use a generalized
158               ! switching parameterization proposed by Morozov and
159               ! Petrovskii (2013)
160               ! ------------------------------------------------------------ 
161               ! The width of the selection window is increased when preys
162               ! have low abundance, .i.e. zooplankton become less specific
163               ! to avoid starvation.
164               ! ----------------------------------------------------------
165               zsigma = 1.0 - zdenom**3/(0.1**3+zdenom**3)
166               zsigma = xsigma + xsigmadel * zsigma
167               zdiffpn = exp( -ABS(log(0.7 * sizep(ji,jj,jk) / (3.0 * sizen(ji,jj,jk) + rtrn )) )**2 / zsigma**2 )
168               zdiffdn = exp( -ABS(log(3.0 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2)
169               zdiffdp = exp( -ABS(log(0.7 * sizep(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2)
170               ztmp1 = xprefn * zcompaph * ( zcompaph + zdiffdn * zcompadi + zdiffpn * zcompapi ) / ( 1.0 + zdiffdn + zdiffpn )
171               ztmp2 = xprefp * zcompapi * ( zcompapi + zdiffpn * zcompaph + zdiffdp * zcompadi ) / ( 1.0 + zdiffpn + zdiffdp )
172               ztmp3 = xprefc * zcompapoc**2
173               ztmp4 = xprefd * zcompadi * ( zdiffdp * zcompapi + zdiffdn * zcompaph + zcompadi ) / ( 1.0 + zdiffdn + zdiffdp )
174               ztmp5 = xprefz * zcompaz**2
175               ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn
176               ztmp1 = ztmp1 / ztmptot
177               ztmp2 = ztmp2 / ztmptot
178               ztmp3 = ztmp3 / ztmptot
179               ztmp4 = ztmp4 / ztmptot
180               ztmp5 = ztmp5 / ztmptot
181
182               !   Microzooplankton regular grazing on the different preys
183               !   -------------------------------------------------------
184               !   Nanophytoplankton
185               zgraznc   = zgraze  * ztmp1  * zdenom 
186               zgraznn   = zgraznc * trb(ji,jj,jk,jpnph) / (trb(ji,jj,jk,jpphy) + rtrn)
187               zgraznp   = zgraznc * trb(ji,jj,jk,jppph) / (trb(ji,jj,jk,jpphy) + rtrn)
188               zgraznf   = zgraznc * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn)
189
190               ! Picophytoplankton
191               zgrazpc   = zgraze  * ztmp2  * zdenom
192               zgrazpn   = zgrazpc * trb(ji,jj,jk,jpnpi) / (trb(ji,jj,jk,jppic) + rtrn)
193               zgrazpp   = zgrazpc * trb(ji,jj,jk,jpppi) / (trb(ji,jj,jk,jppic) + rtrn)
194               zgrazpf   = zgrazpc * trb(ji,jj,jk,jppfe) / (trb(ji,jj,jk,jppic) + rtrn)
195               ! Microzooplankton
196               zgrazz    = zgraze  * ztmp5   * zdenom
197
198               ! small POC
199               zgrazpoc  = zgraze  * ztmp3   * zdenom
200               zgrazpon  = zgrazpoc * trb(ji,jj,jk,jppon) / ( trb(ji,jj,jk,jppoc) + rtrn )
201               zgrazpop  = zgrazpoc * trb(ji,jj,jk,jppop) / ( trb(ji,jj,jk,jppoc) + rtrn )
202               zgrazpof  = zgrazpoc* trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn)
203
204               ! Diatoms
205               zgrazdc   = zgraze  * ztmp4  * zdenom
206               zgrazdn   = zgrazdc * trb(ji,jj,jk,jpndi) / (trb(ji,jj,jk,jpdia) + rtrn)
207               zgrazdp   = zgrazdc * trb(ji,jj,jk,jppdi) / (trb(ji,jj,jk,jpdia) + rtrn)
208               zgrazdf   = zgrazdc * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn)
209               !
210               ! Total ingestion rates in C, P, Fe, N
211               zgraztotc = zgraznc + zgrazpoc + zgrazdc + zgrazz + zgrazpc
212               zgraztotn = zgraznn + zgrazpn + zgrazpon + zgrazdn + zgrazz * no3rat3
213               zgraztotp = zgraznp + zgrazpp + zgrazpop + zgrazdp + zgrazz * po4rat3
214               zgraztotf = zgraznf + zgrazpf + zgrazpof + zgrazdf + zgrazz * feratz
215               !
216               ! Grazing by microzooplankton
217               zgrazing(ji,jj,jk) = zgraztotc
218
219               ! Stoichiometruc ratios of the food ingested by zooplanton
220               ! --------------------------------------------------------
221               zgrasratf =  (zgraztotf + rtrn) / ( zgraztotc + rtrn )
222               zgrasratn =  (zgraztotn + rtrn) / ( zgraztotc + rtrn )
223               zgrasratp =  (zgraztotp + rtrn) / ( zgraztotc + rtrn )
224
225               ! Mesozooplankton efficiency.
226               ! We adopt a formulation proposed by Mitra et al. (2007)
227               ! The gross growth efficiency is controled by the most limiting nutrient.
228               ! Growth is also further decreased when the food quality is poor. This is currently
229               ! hard coded : it can be decreased by up to 50% (zepsherq)
230               ! GGE can also be decreased when food quantity is high, zepsherf (Montagnes and
231               ! Fulton, 2012)
232               ! -----------------------------------------------------------------------------------
233               zepshert  = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / feratz)
234               zbeta     = MAX( 0., (epsher - epshermin) )
235               ! Food density deprivation of GGE
236               zepsherf  = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta )
237               ! Food quality deprivation of GGE
238               zepsherq  = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 )
239               ! Actual GGE
240               zepsherv  = zepsherf * zepshert * zepsherq
241
242               ! Respiration of microzooplankton
243               ! Excess carbon in the food is used preferentially
244               ! when activated by zmetexcess
245               ! ------------------------------------------------
246               zexcess  = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess
247               zbasresb = MAX(0., zrespz - zexcess)
248               zbasresi = zexcess + MIN(0., zrespz - zexcess) 
249               zrespirc = srespir * zepsherv * zgraztotc + zbasresb
250               
251               ! When excess carbon is used, the other elements in excess
252               ! are also used proportionally to their abundance
253               ! --------------------------------------------------------
254               zexcess  = ( zgrasratn/ no3rat3 - zepshert ) / ( 1.0 - zepshert + rtrn)
255               zbasresn = zbasresi * zexcess * zgrasratn 
256               zexcess  = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn)
257               zbasresp = zbasresi * zexcess * zgrasratp
258               zexcess  = ( zgrasratf/ feratz - zepshert ) / ( 1.0 - zepshert + rtrn)
259               zbasresf = zbasresi * zexcess * zgrasratf
260
261               ! Voiding of the excessive elements as DOM
262               ! ----------------------------------------
263               zgradoct   = (1. - unassc - zepsherv) * zgraztotc - zbasresi 
264               zgradont   = (1. - unassn) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn
265               zgradopt   = (1. - unassp) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp
266               zgrareft   = (1. - unassc) * zgraztotf - zepsherv * feratz * zgraztotc - zbasresf
267
268               ! Since only semilabile DOM is represented in PISCES
269               ! part of DOM is in fact labile and is then released
270               ! as dissolved inorganic compounds (ssigma)
271               ! --------------------------------------------------
272               zgradoc =  zgradoct * ssigma
273               zgradon =  zgradont * ssigma
274               zgradop =  zgradopt * ssigma
275               zgrarem = (1.0 - ssigma) * zgradoct
276               zgraren = (1.0 - ssigma) * zgradont
277               zgrarep = (1.0 - ssigma) * zgradopt
278               zgraref = zgrareft
279
280               ! Defecation as a result of non assimilated products
281               ! --------------------------------------------------
282               zgrapoc   = zgraztotc * unassc
283               zgrapon   = zgraztotn * unassn
284               zgrapop   = zgraztotp * unassp
285               zgrapof   = zgraztotf * unassc
286
287               ! Addition of respiration to the release of inorganic nutrients
288               ! -------------------------------------------------------------
289               zgrarem = zgrarem + zbasresi + zrespirc
290               zgraren = zgraren + zbasresn + zrespirc * no3rat3
291               zgrarep = zgrarep + zbasresp + zrespirc * po4rat3
292               zgraref = zgraref + zbasresf + zrespirc * feratz
293
294               ! Update of the TRA arrays
295               ! ------------------------
296               tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarep
297               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgraren
298               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc
299               !
300               IF( ln_ligand ) THEN
301                  tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz
302                  zzligprod(ji,jj,jk) = zgradoc * ldocz
303               ENDIF
304               !
305               tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon
306               tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zgradop
307               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem 
308               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref
309               zfezoo(ji,jj,jk)    = zgraref
310               tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zepsherv * zgraztotc - zrespirc - ztortz - zgrazz
311               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgraznc
312               tra(ji,jj,jk,jpnph) = tra(ji,jj,jk,jpnph) - zgraznn
313               tra(ji,jj,jk,jppph) = tra(ji,jj,jk,jppph) - zgraznp
314               tra(ji,jj,jk,jppic) = tra(ji,jj,jk,jppic) - zgrazpc
315               tra(ji,jj,jk,jpnpi) = tra(ji,jj,jk,jpnpi) - zgrazpn
316               tra(ji,jj,jk,jpppi) = tra(ji,jj,jk,jpppi) - zgrazpp
317               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazdc
318               tra(ji,jj,jk,jpndi) = tra(ji,jj,jk,jpndi) - zgrazdn
319               tra(ji,jj,jk,jppdi) = tra(ji,jj,jk,jppdi) - zgrazdp
320               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgraznc * trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn)
321               tra(ji,jj,jk,jppch) = tra(ji,jj,jk,jppch) - zgrazpc * trb(ji,jj,jk,jppch)/(trb(ji,jj,jk,jppic)+rtrn)
322               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazdc * trb(ji,jj,jk,jpdch)/(trb(ji,jj,jk,jpdia)+rtrn)
323               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazdc * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn)
324               tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazdc * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn)
325               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf
326               tra(ji,jj,jk,jppfe) = tra(ji,jj,jk,jppfe) - zgrazpf
327               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazdf
328               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + ztortz + zgrapoc - zgrazpoc 
329               prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ztortz + zgrapoc
330               conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc
331               tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + no3rat3 * ztortz + zgrapon - zgrazpon
332               tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + po4rat3 * ztortz + zgrapop - zgrazpop
333               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + feratz * ztortz  + zgrapof - zgrazpof
334               !
335               ! Calcite production
336               ! Calcite remineralization due to zooplankton activity
337               ! part of the ingested calcite is dissolving in the acidic gut
338               ! -------------------------------------------------------------
339               zprcaca = xfracal(ji,jj,jk) * zgraznc
340               prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo)
341               !
342               zprcaca = part * zprcaca
343               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem - zprcaca
344               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca     &
345               &                     + rno3 * zgraren
346               tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca
347            END DO
348         END DO
349      END DO
350      !
351      IF( lk_iomput ) THEN
352         IF( knt == nrdttrc ) THEN
353            ALLOCATE( zw3d(jpi,jpj,jpk) )
354            IF( iom_use( "GRAZ1" ) ) THEN
355               zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)  !  Total grazing of phyto by zooplankton
356               CALL iom_put( "GRAZ1", zw3d )
357            ENDIF
358            IF( iom_use( "FEZOO" ) ) THEN
359               zw3d(:,:,:) = zfezoo(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)   !
360               CALL iom_put( "FEZOO", zw3d )
361            ENDIF
362            IF( iom_use( "LPRODZ" ) .AND. ln_ligand )  THEN
363               zw3d(:,:,:) = zzligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)
364               CALL iom_put( "LPRODZ"  , zw3d )
365            ENDIF
366            DEALLOCATE( zw3d )
367         ENDIF
368      ENDIF
369      !
370      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
371         WRITE(charout, FMT="('micro')")
372         CALL prt_ctl_trc_info(charout)
373         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
374      ENDIF
375      !
376      IF( ln_timing )   CALL timing_stop('p5z_micro')
377      !
378   END SUBROUTINE p5z_micro
379
380
381   SUBROUTINE p5z_micro_init
382      !!----------------------------------------------------------------------
383      !!                  ***  ROUTINE p5z_micro_init  ***
384      !!
385      !! ** Purpose :   Initialization of microzooplankton parameters
386      !!
387      !! ** Method  :   Read the namp5zzoo namelist and check the parameters
388      !!                called at the first timestep (nittrc000)
389      !!
390      !! ** input   :   Namelist namp5zzoo
391      !!
392      !!----------------------------------------------------------------------
393      INTEGER ::   ios   ! Local integer
394      !!
395      NAMELIST/namp5zzoo/ part, grazrat, bmetexc, resrat, mzrat, xprefc, xprefn, &
396         &                xprefp, xprefd, xprefz, xthreshdia, xthreshphy, &
397         &                xthreshpic, xthreshpoc, xthreshzoo, xthresh, xkgraz, &
398         &                epsher, epshermin, ssigma, srespir, unassc, unassn, unassp,   &
399         &                xsigma, xsigmadel   
400      !!----------------------------------------------------------------------
401      !
402      REWIND( numnatp_ref )              ! Namelist namp5zzoo in reference namelist : Pisces microzooplankton
403      READ  ( numnatp_ref, namp5zzoo, IOSTAT = ios, ERR = 901)
404901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zzoo in reference namelist' )
405      !
406      REWIND( numnatp_cfg )              ! Namelist namp5zzoo in configuration namelist : Pisces microzooplankton
407      READ  ( numnatp_cfg, namp5zzoo, IOSTAT = ios, ERR = 902 )
408902   IF( ios >  0 ) CALL ctl_nam ( ios , 'namp5zzoo in configuration namelist' )
409      IF(lwm) WRITE ( numonp, namp5zzoo )
410      !
411      IF(lwp) THEN                         ! control print
412         WRITE(numout,*) ' '
413         WRITE(numout,*) ' Namelist parameters for microzooplankton, nampiszooq'
414         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
415         WRITE(numout,*) '    part of calcite not dissolved in microzoo guts  part        =', part
416         WRITE(numout,*) '    microzoo preference for POC                     xprefc     =', xprefc
417         WRITE(numout,*) '    microzoo preference for nano                    xprefn     =', xprefn
418         WRITE(numout,*) '    microzoo preference for pico                    xprefp     =', xprefp
419         WRITE(numout,*) '    microzoo preference for diatoms                 xprefd     =', xprefd
420         WRITE(numout,*) '    microzoo preference for microzoo                xprefz     =', xprefz
421         WRITE(numout,*) '    diatoms feeding threshold  for microzoo         xthreshdia  =', xthreshdia
422         WRITE(numout,*) '    nanophyto feeding threshold for microzoo        xthreshphy  =', xthreshphy
423         WRITE(numout,*) '    picophyto feeding threshold for microzoo        xthreshpic  =', xthreshpic
424         WRITE(numout,*) '    poc feeding threshold for microzoo              xthreshpoc  =', xthreshpoc
425         WRITE(numout,*) '    microzoo feeding threshold for microzoo         xthreshzoo  =', xthreshzoo
426         WRITE(numout,*) '    feeding threshold for microzooplankton          xthresh     =', xthresh
427         WRITE(numout,*) '    exsudation rate of microzooplankton             resrat      =', resrat
428         WRITE(numout,*) '    microzooplankton mortality rate                 mzrat       =', mzrat
429         WRITE(numout,*) '    maximal microzoo grazing rate                   grazrat     =', grazrat
430         WRITE(numout,*) '    C egested fraction of fodd by microzoo          unassc      =', unassc
431         WRITE(numout,*) '    N egested fraction of fodd by microzoo          unassn      =', unassn
432         WRITE(numout,*) '    P egested fraction of fodd by microzoo          unassp      =', unassp
433         WRITE(numout,*) '    Efficicency of microzoo growth                  epsher      =', epsher
434         WRITE(numout,*) '    Minimum Efficiency of Microzoo growth           epshermin   =', epshermin
435         WRITE(numout,*) '    Fraction excreted as semi-labile DOM            ssigma      =', ssigma
436         WRITE(numout,*) '    Active respiration                              srespir     =', srespir
437         WRITE(numout,*) '    half sturation constant for grazing 1           xkgraz      =', xkgraz
438         WRITE(numout,*) '    Use of excess carbon for respiration            bmetexc     =', bmetexc
439         WRITE(numout,*) '      Width of the grazing window                     xsigma      =', xsigma
440         WRITE(numout,*) '      Maximum additional width of the grazing window  xsigmadel   =', xsigmadel
441      ENDIF
442      !
443   END SUBROUTINE p5z_micro_init
444
445   !!======================================================================
446END MODULE p5zmicro
Note: See TracBrowser for help on using the repository browser.