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.
p5zmeso.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/p5zmeso.F90 @ 7617

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

update diagnostics + changes in quota code

  • Property svn:executable set to *
File size: 29.3 KB
Line 
1MODULE p5zmeso
2   !!======================================================================
3   !!                         ***  MODULE p5zmeso  ***
4   !! TOP :   PISCES Compute the sources/sinks for mesozooplankton
5   !!======================================================================
6   !! History :   1.0  !  2002     (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_meso       :   Compute the sources/sinks for mesozooplankton
16   !!   p5z_meso_init  :   Initialization of the parameters for mesozooplankton
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 prtctl_trc      !  print control for debugging
22   USE p5zsink         !  Sedimentation of particles
23   USE iom             !  I/O manager
24
25   IMPLICIT NONE
26   PRIVATE
27
28   PUBLIC   p5z_meso              ! called in p5zbio.F90
29   PUBLIC   p5z_meso_init         ! called in trcsms_pisces.F90
30
31   !! * Shared module variables
32   REAL(wp), PUBLIC ::  part2        !: part of calcite not dissolved in mesozoo guts
33   REAL(wp), PUBLIC ::  xpref2c      !: mesozoo preference for POC
34   REAL(wp), PUBLIC ::  xpref2p      !: mesozoo preference for nanophyto
35   REAL(wp), PUBLIC ::  xpref2z      !: mesozoo preference for zooplankton
36   REAL(wp), PUBLIC ::  xpref2d      !: mesozoo preference for Diatoms
37   REAL(wp), PUBLIC ::  xpref2m      !: mesozoo preference for mesozoo
38   REAL(wp), PUBLIC ::  xthresh2zoo  !: zoo feeding threshold for mesozooplankton
39   REAL(wp), PUBLIC ::  xthresh2dia  !: diatoms feeding threshold for mesozooplankton
40   REAL(wp), PUBLIC ::  xthresh2phy  !: nanophyto feeding threshold for mesozooplankton
41   REAL(wp), PUBLIC ::  xthresh2poc  !: poc feeding threshold for mesozooplankton
42   REAL(wp), PUBLIC ::  xthresh2mes  !: mesozoo feeding threshold for mesozooplankton
43   REAL(wp), PUBLIC ::  xthresh2     !: feeding threshold for mesozooplankton
44   REAL(wp), PUBLIC ::  resrat2      !: exsudation rate of mesozooplankton
45   REAL(wp), PUBLIC ::  mzrat2       !: microzooplankton mortality rate
46   REAL(wp), PUBLIC ::  grazrat2     !: maximal mesozoo grazing rate
47   REAL(wp), PUBLIC ::  xkgraz2      !: non assimilated fraction of P by mesozoo
48   REAL(wp), PUBLIC ::  unass2c      !: Efficicency of mesozoo growth
49   REAL(wp), PUBLIC ::  unass2n      !: Efficicency of mesozoo growth
50   REAL(wp), PUBLIC ::  unass2p      !: Efficicency of mesozoo growth
51   REAL(wp), PUBLIC ::  epsher2      !: half sturation constant for grazing 2
52   REAL(wp), PUBLIC ::  ssigma2      !: Fraction excreted as semi-labile DOM
53   REAL(wp), PUBLIC ::  srespir2     !: Active respiration
54   REAL(wp), PUBLIC ::  grazflux     !: mesozoo flux feeding rate
55   LOGICAL,  PUBLIC ::  bmetexc2     !: Use of excess carbon for respiration
56
57   !!* Substitution
58#  include "top_substitute.h90"
59   !!----------------------------------------------------------------------
60   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
61   !! $Id: p4zmeso.F90 3160 2011-11-20 14:27:18Z cetlod $
62   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
63   !!----------------------------------------------------------------------
64
65CONTAINS
66
67   SUBROUTINE p5z_meso( kt, knt )
68      !!---------------------------------------------------------------------
69      !!                     ***  ROUTINE p5z_meso  ***
70      !!
71      !! ** Purpose :   Compute the sources/sinks for mesozooplankton
72      !!
73      !! ** Method  : - ???
74      !!---------------------------------------------------------------------
75      INTEGER, INTENT(in) ::   kt, knt ! ocean time step
76      INTEGER  :: ji, jj, jk
77      REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam, zcompames
78      REAL(wp) :: zgraze2, zdenom, zfact, zstep, zfood, zfoodlim, zproport
79      REAL(wp) :: zmortzgoc, zfracc, zfracn, zfracp, zfracfe, zratio, zratio2
80      REAL(wp) :: zepsherf, zepshert, zepsherv, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi
81      REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf, zbasresn, zbasresp, zbasresf
82      REAL(wp) :: zgradoc, zgradon, zgradop, zgratmp, zgradoct, zgradont, zgrareft, zgradopt
83      REAL(wp) :: zgrapoc, zgrapon, zgrapop, zgrapof, zprcaca, zmortz
84      REAL(wp) :: zexcess, zgrarem, zgraren, zgrarep, zgraref
85      REAL(wp) :: zbeta, zrespz, ztortz, zgrasratp, zgrasratn, zgrasratf
86      REAL(wp) :: ztmp1, ztmp2, ztmp3, ztmp4, ztmp5, ztmptot
87#if defined key_kriest
88      REAL znumpoc
89#endif
90      REAL(wp) :: zgrazdc, zgrazz, zgrazm, zgrazpof, zgrazcal, zfracal
91      REAL(wp) :: zgraznc, zgrazpoc, zgrazpon, zgrazpop, zgraznf, zgrazdf
92      REAL(wp) :: zgraznp, zgraznn, zgrazdn, zgrazdp
93      REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg
94      REAL(wp) :: zgrazffnp, zgrazffng, zgrazffpp, zgrazffpg
95      CHARACTER (len=25) :: charout
96      REAL(wp) :: zrfact2, zmetexcess
97      REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d, zfezoo2
98#if defined key_ligand
99      REAL(wp), POINTER, DIMENSION(:,:,:) :: zz2ligprod
100#endif
101
102      !!---------------------------------------------------------------------
103      !
104      IF( nn_timing == 1 )  CALL timing_start('p5z_meso')
105      !
106      CALL wrk_alloc( jpi, jpj, jpk, zgrazing, zfezoo2 )
107#if defined key_ligand
108      CALL wrk_alloc( jpi, jpj, jpk, zz2ligprod )
109      zz2ligprod(:,:,:) = 0._wp
110#endif
111      zgrazing(:,:,:) = 0._wp
112      zfezoo2(:,:,:) = 0._wp
113
114      zmetexcess = 0.0
115      IF ( bmetexc2 ) zmetexcess = 1.0
116
117      DO jk = 1, jpkm1
118         DO jj = 1, jpj
119            DO ji = 1, jpi
120               zcompam   = MAX( ( trb(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 )
121# if defined key_degrad
122               zstep     = xstep * facvol(ji,jj,jk)
123# else
124               zstep     = xstep
125# endif
126               zfact     = zstep * tgfunc2(ji,jj,jk) * zcompam
127
128               !   Michaelis-Menten mortality rates of mesozooplankton
129               !   ---------------------------------------------------
130               zrespz   = resrat2 * zfact * ( trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) )  &
131               &          + 3. * nitrfac(ji,jj,jk) )
132
133               !   Zooplankton mortality. A square function has been selected with
134               !   no real reason except that it seems to be more stable and may mimic predation
135               !   ---------------------------------------------------------------
136               ztortz   = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes)
137
138               !   Computation of the abundance of the preys
139               !   A threshold can be specified in the namelist
140               !   --------------------------------------------
141               zcompadi  = MAX( ( trb(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 )
142               zcompaz   = MAX( ( trb(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 )
143               zcompaph  = MAX( ( trb(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 )
144               zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 )
145               zcompames = MAX( ( trb(ji,jj,jk,jpmes) - xthresh2mes ), 0.e0 )
146
147               !   Mesozooplankton grazing
148               !   ------------------------
149               zfood     = xpref2d * zcompadi + xpref2z * zcompaz + xpref2p * zcompaph + xpref2c * zcompapoc   &
150               &           + xpref2m * zcompames 
151               zfoodlim  = MAX( 0., zfood - MIN( 0.5 * zfood, xthresh2 ) )
152               zdenom    = zfoodlim / ( xkgraz2 + zfoodlim )
153               zgraze2   = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) 
154
155               !   An active switching parameterization is used here.
156               !   We don't use the KTW parameterization proposed by
157               !   Vallina et al. because it tends to produce to steady biomass
158               !   composition and the variance of Chl is too low as it grazes
159               !   too strongly on winning organisms. Thus, instead of a square
160               !   a 1.5 power value is used which decreases the pressure on the
161               !   most abundant species
162               !   ------------------------------------------------------------ 
163               ztmp1 = xpref2p * zcompaph * (0.75 * zcompaph + 0.25 * zcompadi)
164               ztmp2 = xpref2m * zcompames**2
165               ztmp3 = xpref2c * zcompapoc**2
166               ztmp4 = xpref2d * zcompadi * (0.75 * zcompadi + 0.25 * zcompaph)
167               ztmp5 = xpref2z * zcompaz**2
168               ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn
169               ztmp1 = ztmp1 / ztmptot
170               ztmp2 = ztmp2 / ztmptot
171               ztmp3 = ztmp3 / ztmptot
172               ztmp4 = ztmp4 / ztmptot
173               ztmp5 = ztmp5 / ztmptot
174
175               !   Mesozooplankton regular grazing on the different preys
176               !   ------------------------------------------------------
177               zgrazdc   = zgraze2 * ztmp4 * zdenom
178               zgrazdn   = zgrazdc * trb(ji,jj,jk,jpndi) / ( trb(ji,jj,jk,jpdia) + rtrn)
179               zgrazdp   = zgrazdc * trb(ji,jj,jk,jppdi) / ( trb(ji,jj,jk,jpdia) + rtrn)
180               zgrazdf   = zgrazdc * trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn)
181               zgrazz    = zgraze2 * ztmp5 * zdenom
182               zgrazm    = zgraze2 * ztmp2 * zdenom
183               zgraznc   = zgraze2 * ztmp1 * zdenom
184               zgraznn   = zgraznc * trb(ji,jj,jk,jpnph) / ( trb(ji,jj,jk,jpphy) + rtrn)
185               zgraznp   = zgraznc * trb(ji,jj,jk,jppph) / ( trb(ji,jj,jk,jpphy) + rtrn)
186               zgraznf   = zgraznc * trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn)
187               zgrazpoc  = zgraze2 * ztmp3 * zdenom
188               zgrazpon  = zgrazpoc * trb(ji,jj,jk,jppon) / ( trb(ji,jj,jk,jppoc) + rtrn)
189               zgrazpop  = zgrazpoc * trb(ji,jj,jk,jppop) / ( trb(ji,jj,jk,jppoc) + rtrn)
190               zgrazpof  = zgrazpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn)
191
192               !   Mesozooplankton flux feeding on GOC
193               !   ----------------------------------
194# if ! defined key_kriest
195               zgrazffeg = grazflux  * zstep * wsbio4(ji,jj,jk)      &
196               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes)
197               zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn)
198               zgrazffng = zgrazffeg * trb(ji,jj,jk,jpgon) / (trb(ji,jj,jk,jpgoc) + rtrn)
199               zgrazffpg = zgrazffeg * trb(ji,jj,jk,jpgop) / (trb(ji,jj,jk,jpgoc) + rtrn)
200# endif
201               zgrazffep = grazflux  * zstep *  wsbio3(ji,jj,jk)     &
202               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes)
203               zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn)
204               zgrazffnp = zgrazffep * trb(ji,jj,jk,jppon) / (trb(ji,jj,jk,jppoc) + rtrn)
205               zgrazffpp = zgrazffep * trb(ji,jj,jk,jppop) / (trb(ji,jj,jk,jppoc) + rtrn)
206               !
207# if ! defined key_kriest
208               zgraztotc  = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg
209
210               !   Compute the proportion of filter feeders
211               !   ---------------------------------------- 
212               zproport  = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc)
213
214               !   Compute fractionation of aggregates. It is assumed that
215               !   diatoms based aggregates are more prone to fractionation
216               !   since they are more porous (marine snow instead of fecal pellets)
217               !   ----------------------------------------------------------------
218               zratio    = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn )
219               zratio2   = zratio * zratio
220               zfracc    = zproport * grazflux  * zstep * wsbio4(ji,jj,jk)      &
221               &          * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes)          &
222               &          * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) )
223               zfracfe   = zfracc * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn)
224               zfracn    = zfracc * trb(ji,jj,jk,jpgon) / (trb(ji,jj,jk,jpgoc) + rtrn)
225               zfracp    = zfracc * trb(ji,jj,jk,jpgop) / (trb(ji,jj,jk,jpgoc) + rtrn)
226
227               zgrazffep = zproport * zgrazffep   ;   zgrazffeg = zproport * zgrazffeg
228               zgrazfffp = zproport * zgrazfffp   ;   zgrazfffg = zproport * zgrazfffg
229               zgrazffnp = zproport * zgrazffnp   ;   zgrazffng = zproport * zgrazffng
230               zgrazffpp = zproport * zgrazffpp   ;   zgrazffpg = zproport * zgrazffpg
231
232               zgraztotc  = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg
233               zgraztotf  = zgrazdf + zgraznf + ( zgrazz + zgrazm ) * ferat3 + zgrazpof &
234               &            + zgrazfffp + zgrazfffg
235               zgraztotn  = zgrazdn + (zgrazm + zgrazz) * no3rat3 + zgraznn + zgrazpon  &
236               &            + zgrazffnp + zgrazffng
237               zgraztotp  = zgrazdp + (zgrazz + zgrazm) * po4rat3 + zgraznp + zgrazpop  &
238               &            + zgrazffpp + zgrazffpg
239
240# else
241               zgraztotc  = zgrazdc + zgrazz + zgrazm + zgraznc + zgrazpoc + zgrazffep
242
243               !   Compute the proportion of filter feeders
244               !   ----------------------------------------
245               zproport  = zgrazffep / ( zgraztotc + rtrn )
246               zgrazffep = zproport * zgrazffep   ;   zgrazfffp = zproport * zgrazfffp
247               zgrazffnp = zproport * zgrazffnp   ;   zgrazffpp = zproport * zgrazffpp
248               zgraztotc = zgrazdc + zgrazz + zgrazm + zgraznc + zgrazpoc + zgrazffep
249               zgraztotf = zgrazdf + zgraznf + (zgrazz + zgrazm) * ferat3 + zgrazpof + zgrazfffp
250               zgraztotn = zgrazdn + (zgrazz + zgrazm) * no3rat3 + zgraznn + zgrazpon + zgrazffnp
251               zgraztotp = zgrazdp + (zgrazz + zgrazm) * po4rat3 + zgraznp + zgrazpop + zgrazffpp
252# endif
253
254               ! Total grazing ( grazing by microzoo is already computed in p5zmicro )
255               IF( ln_diatrc .AND. lk_iomput )  zgrazing(ji,jj,jk) = zgraztotc
256
257               !   Stoichiometruc ratios of the food ingested by zooplanton
258               !   --------------------------------------------------------
259               zgrasratf  =  (zgraztotf + rtrn) / ( zgraztotc + rtrn )
260               zgrasratn  =  (zgraztotn + rtrn) / ( zgraztotc + rtrn )
261               zgrasratp  =  (zgraztotp + rtrn) / ( zgraztotc + rtrn )
262
263               !   Growth efficiency is made a function of the quality
264               !   and the quantity of the preys
265               !   ---------------------------------------------------
266               zepshert  = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3)
267               zbeta = 1./ (epsher2 - 0.2)
268               zepsherf = 0.2 + 1./ (zbeta + 0.04 * 12. * zfood *1E6 )
269               zepsherv  = zepsherf * zepshert
270
271               !   Respiration of mesozooplankton
272               !   Excess carbon in the food is used preferentially
273               !   ----------------  ------------------------------
274               zexcess  = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess 
275               zbasresb = MAX(0., zrespz - zexcess)
276               zbasresi = zexcess + MIN(0., zrespz - zexcess)
277               zrespirc = srespir2 * zepsherv * zgraztotc + zbasresb
278
279               !   When excess carbon is used, the other elements in excess
280               !   are also used proportionally to their abundance
281               !   --------------------------------------------------------
282               zexcess  = ( zgrasratn/ no3rat3 - zepshert ) / ( 1.0 - zepshert + rtrn)
283               zbasresn = zbasresi * zexcess * zgrasratn
284               zexcess  = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn)
285               zbasresp = zbasresi * zexcess * zgrasratp
286               zexcess  = ( zgrasratf/ ferat3 - zepshert ) / ( 1.0 - zepshert + rtrn)
287               zbasresf = zbasresi * zexcess * zgrasratf
288
289               !   Voiding of the excessive elements as organic matter
290               !   --------------------------------------------------------
291               zgradoct = (1. - unass2c - zepsherv) * zgraztotc - zbasresi
292               zgradont = (1. - unass2n) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn
293               zgradopt = (1. - unass2p) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp
294               zgrareft = (1. - unass2c) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf
295               ztmp1   = ( 1. - epsher2 - unass2c ) /( 1. - 0.8 * epsher2 ) * ztortz
296               zgradoc = (zgradoct + ztmp1) * ssigma2
297               zgradon = (zgradont + no3rat3 * ztmp1) * ssigma2
298               zgradop = (zgradopt + po4rat3 * ztmp1) * ssigma2
299               zgratmp = 0.2 * epsher2 /( 1. - 0.8 * epsher2 ) * ztortz
300
301               !  Since only semilabile DOM is represented in PISCES
302               !  part of DOM is in fact labile and is then released
303               !  as dissolved inorganic compounds (ssigma2)
304               !  --------------------------------------------------
305               zgrarem = zgratmp + ( zgradoct + ztmp1 ) * (1.0 - ssigma2)
306               zgraren = no3rat3 * zgratmp + ( zgradont + no3rat3 * ztmp1 ) * (1.0 - ssigma2)
307               zgrarep = po4rat3 * zgratmp + ( zgradopt + po4rat3 * ztmp1 ) * (1.0 - ssigma2)
308               zgraref = zgrareft + ferat3 * ( ztmp1 + zgratmp )
309
310               !   Defecation as a result of non assimilated products
311               !   --------------------------------------------------
312               zgrapoc  = zgraztotc * unass2c + unass2c / ( 1. - 0.8 * epsher2 ) * ztortz
313               zgrapon  = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - 0.8 * epsher2 ) * ztortz
314               zgrapop  = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - 0.8 * epsher2 ) * ztortz
315               zgrapof  = zgraztotf * unass2c + ferat3  * unass2c / ( 1. - 0.8 * epsher2 ) * ztortz
316
317               !  Addition of respiration to the release of inorganic nutrients
318               !  -------------------------------------------------------------
319               zgrarem = zgrarem + zbasresi + zrespirc
320               zgraren = zgraren + zbasresn + zrespirc * no3rat3
321               zgrarep = zgrarep + zbasresp + zrespirc * po4rat3
322               zgraref = zgraref + zbasresf + zrespirc * ferat3
323
324               !   Update the arrays TRA which contain the biological sources and
325               !   sinks
326               !   --------------------------------------------------------------
327               tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarep 
328               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgraren
329               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc
330#if defined key_ligand
331               tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz
332               zz2ligprod(ji,jj,jk) = zgradoc * ldocz
333#endif
334               tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon
335               tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zgradop
336               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem
337               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref
338               zfezoo2(ji,jj,jk)   = zgraref
339               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem
340               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgraren
341               tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) + zepsherv * zgraztotc - zrespirc   &
342               &                     - ztortz - zgrazm
343               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazdc
344               tra(ji,jj,jk,jpndi) = tra(ji,jj,jk,jpndi) - zgrazdn
345               tra(ji,jj,jk,jppdi) = tra(ji,jj,jk,jppdi) - zgrazdp
346               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazdf
347               tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zgrazz
348               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgraznc
349               tra(ji,jj,jk,jpnph) = tra(ji,jj,jk,jpnph) - zgraznn
350               tra(ji,jj,jk,jppph) = tra(ji,jj,jk,jppph) - zgraznp
351               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf
352               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgraznc * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpphy) + rtrn )
353               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazdc * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn )
354               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazdc * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn )
355               tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazdc * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn )
356
357#if defined key_kriest
358               znumpoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn )
359               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zgrapoc
360               tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zgrazpon - zgrazffnp + zgrapon
361               tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zgrazpop - zgrazffpp + zgrapop
362               tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc + zgrapoc * xkr_dmeso      &
363               &   - zgrazffep * znumpoc * wsbio4(ji,jj,jk) / ( wsbio3(ji,jj,jk) + rtrn )
364               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazfffp - zgrazpof    &
365               &   + zgrapof
366               zfracal = trb(ji,jj,jk,jpcal) / (trb(ji,jj,jk,jppoc) + rtrn )
367               zgrazcal = ( zgrazffep + zgrazpoc ) * (1. - part2) * zfracal
368#else
369               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfracc
370               prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfracc
371               conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc - zgrazffep
372               tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zgrazpon - zgrazffnp + zfracn
373               tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zgrazpop - zgrazffpp + zfracp
374               tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) - zgrazffeg + zgrapoc - zfracc
375               prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zgrapoc
376               consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfracc
377               tra(ji,jj,jk,jpgon) = tra(ji,jj,jk,jpgon) - zgrazffng + zgrapon - zfracn
378               tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) - zgrazffpg + zgrapop - zfracp
379               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof - zgrazfffp + zfracfe
380               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) - zgrazfffg + zgrapof - zfracfe
381               zfracal = trb(ji,jj,jk,jpcal) / ( trb(ji,jj,jk,jpgoc) + rtrn )
382               zgrazcal = zgrazffeg * (1. - part2) * zfracal
383#endif
384               !  calcite production
385               !  ------------------
386               zprcaca = xfracal(ji,jj,jk) * zgraznc
387               prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo)
388               zprcaca = part2 * zprcaca
389               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrazcal - zprcaca
390               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * ( zgrazcal - zprcaca )
391               tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) - zgrazcal + zprcaca
392            END DO
393         END DO
394      END DO
395      !
396      IF( lk_iomput .AND. knt == nrdttrc ) THEN
397         CALL wrk_alloc( jpi, jpj, jpk, zw3d )
398         IF( iom_use( "GRAZ2" ) ) THEN
399            zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)  !   Total grazing of phyto by zooplankton
400            CALL iom_put( "GRAZ2", zw3d )
401         ENDIF
402         IF( iom_use( "PCAL" ) ) THEN
403            zw3d(:,:,:) = prodcal(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)   !  Calcite production
404            CALL iom_put( "PCAL", zw3d )
405         ENDIF
406         IF( iom_use( "FEZOO2" ) ) THEN
407            zw3d(:,:,:) = zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)   !
408            CALL iom_put( "FEZOO2", zw3d )
409         ENDIF
410#if defined key_ligand
411         IF( iom_use( "LPRODZ2" ) )  THEN
412            zw3d(:,:,:) = zz2ligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)
413            CALL iom_put( "LPRODZ2"  , zw3d )
414         ENDIF
415#endif
416         CALL wrk_dealloc( jpi, jpj, jpk, zw3d )
417      ENDIF
418      !
419      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
420        WRITE(charout, FMT="('meso')")
421        CALL prt_ctl_trc_info(charout)
422        CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
423      ENDIF
424      !
425#if defined key_ligand
426      CALL wrk_dealloc( jpi, jpj, jpk, zgrazing, zfezoo2, zz2ligprod )
427#else
428      CALL wrk_dealloc( jpi, jpj, jpk, zgrazing, zfezoo2 )
429#endif
430      !
431      IF( nn_timing == 1 )  CALL timing_stop('p5z_meso')
432      !
433   END SUBROUTINE p5z_meso
434
435   SUBROUTINE p5z_meso_init
436
437      !!----------------------------------------------------------------------
438      !!                  ***  ROUTINE p5z_meso_init  ***
439      !!
440      !! ** Purpose :   Initialization of mesozooplankton parameters
441      !!
442      !! ** Method  :   Read the nampismes namelist and check the parameters
443      !!      called at the first timestep (nittrc000)
444      !!
445      !! ** input   :   Namelist nampismes
446      !!
447      !!----------------------------------------------------------------------
448
449      NAMELIST/nampismes/ part2, bmetexc2, grazrat2, resrat2, mzrat2, xpref2c, xpref2p, xpref2z, &
450         &                xpref2m, xpref2d, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, &
451         &                xthresh2mes, xthresh2, xkgraz2, epsher2, ssigma2, unass2c, &
452      &                   unass2n, unass2p, srespir2, grazflux
453
454      INTEGER :: ios                 ! Local integer output status for namelist read
455
456      REWIND( numnatp_ref )              ! Namelist nampismes in reference namelist : Pisces mesozooplankton
457      READ  ( numnatp_ref, nampismes, IOSTAT = ios, ERR = 901)
458901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismes in reference namelist', lwp )
459
460      REWIND( numnatp_cfg )              ! Namelist nampismes in configuration namelist : Pisces mesozooplankton
461      READ  ( numnatp_cfg, nampismes, IOSTAT = ios, ERR = 902 )
462902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismes in configuration namelist', lwp )
463      IF(lwm) WRITE ( numonp, nampismes )
464
465
466      IF(lwp) THEN                         ! control print
467         WRITE(numout,*) ' ' 
468         WRITE(numout,*) ' Namelist parameters for mesozooplankton, nampismes'
469         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
470         WRITE(numout,*) '    part of calcite not dissolved in mesozoo guts  part2        =', part2
471         WRITE(numout,*) '    mesozoo preference for nano.                   xpref2p      =', xpref2p
472         WRITE(numout,*) '    mesozoo preference for diatoms                 xpref2d      =', xpref2d
473         WRITE(numout,*) '    mesozoo preference for zoo                     xpref2z      =', xpref2z
474         WRITE(numout,*) '    mesozoo preference for mesozoo                 xpref2m      =', xpref2m
475         WRITE(numout,*) '    mesozoo preference for poc                     xpref2c      =', xpref2c
476         WRITE(numout,*) '    microzoo feeding threshold  for mesozoo        xthresh2zoo  =', xthresh2zoo
477         WRITE(numout,*) '    diatoms feeding threshold  for mesozoo         xthresh2dia  =', xthresh2dia
478         WRITE(numout,*) '    nanophyto feeding threshold for mesozoo        xthresh2phy  =', xthresh2phy
479         WRITE(numout,*) '    poc feeding threshold for mesozoo              xthresh2poc  =', xthresh2poc
480         WRITE(numout,*) '    mesozoo feeding threshold for mesozoo          xthresh2mes  =', xthresh2mes
481         WRITE(numout,*) '    feeding threshold for mesozooplankton          xthresh2     =', xthresh2
482         WRITE(numout,*) '    exsudation rate of mesozooplankton             resrat2      =', resrat2
483         WRITE(numout,*) '    mesozooplankton mortality rate                 mzrat2       =', mzrat2
484         WRITE(numout,*) '    maximal mesozoo grazing rate                   grazrat2     =', grazrat2
485         WRITE(numout,*) '    mesozoo flux feeding rate                      grazflux     =', grazflux
486         WRITE(numout,*) '    C egested fraction of food by mesozoo          unass2c       =', unass2c
487         WRITE(numout,*) '    C egested fraction of food by mesozoo          unass2n       =', unass2n
488         WRITE(numout,*) '    C egested fraction of food by mesozoo          unass2p       =', unass2p
489         WRITE(numout,*) '    Efficicency of Mesozoo growth                  epsher2      =', epsher2
490         WRITE(numout,*) '    Fraction excreted as semi-labile DOM           ssigma2      =', ssigma2
491         WRITE(numout,*) '    Active respiration                             srespir2     =', srespir2
492         WRITE(numout,*) '    half sturation constant for grazing 2          xkgraz2      =', xkgraz2
493         WRITE(numout,*) '    Use excess carbon for respiration         bmetexc2          =', bmetexc2
494      ENDIF
495
496
497   END SUBROUTINE p5z_meso_init
498
499
500#else
501   !!======================================================================
502   !!  Dummy module :                                   No PISCES bio-model
503   !!======================================================================
504CONTAINS
505   SUBROUTINE p5z_meso                    ! Empty routine
506   END SUBROUTINE p5z_meso
507#endif 
508
509   !!======================================================================
510END MODULE  p5zmeso
Note: See TracBrowser for help on using the repository browser.