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

source: branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zmeso.F90 @ 5266

Last change on this file since 5266 was 5266, checked in by cetlod, 9 years ago

PISCES_QUOTA : First commits, see ticket #1516

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