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

source: NEMO/branches/2019/dev_r11613_ENHANCE-04_namelists_as_internalfiles/src/TOP/PISCES/P4Z/p5zmeso.F90 @ 11671

Last change on this file since 11671 was 11671, checked in by acc, 5 years ago

Branch 2019/dev_r11613_ENHANCE-04_namelists_as_internalfiles. Final, non-substantive changes to complete this branch. These changes remove all REWIND statements on the old namelist fortran units (now character variables for internal files). These changes have been left until last since they are easily repeated via a script and it may be preferable to use the previous revision for merge purposes and reapply these last changes separately. This branch has been fully SETTE tested.

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