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/2020/dev_r12563_ASINTER-06_ABL_improvement/src/TOP/PISCES/P4Z – NEMO

source: NEMO/branches/2020/dev_r12563_ASINTER-06_ABL_improvement/src/TOP/PISCES/P4Z/p5zmicro.F90 @ 13684

Last change on this file since 13684 was 12377, checked in by acc, 4 years ago

The big one. Merging all 2019 developments from the option 1 branch back onto the trunk.

This changeset reproduces 2019/dev_r11943_MERGE_2019 on the trunk using a 2-URL merge
onto a working copy of the trunk. I.e.:

svn merge --ignore-ancestry \

svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/trunk \
svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/branches/2019/dev_r11943_MERGE_2019 ./

The --ignore-ancestry flag avoids problems that may otherwise arise from the fact that
the merge history been trunk and branch may have been applied in a different order but
care has been taken before this step to ensure that all applicable fixes and updates
are present in the merge branch.

The trunk state just before this step has been branched to releases/release-4.0-HEAD
and that branch has been immediately tagged as releases/release-4.0.2. Any fixes
or additions in response to tickets on 4.0, 4.0.1 or 4.0.2 should be done on
releases/release-4.0-HEAD. From now on future 'point' releases (e.g. 4.0.2) will
remain unchanged with periodic releases as needs demand. Note release-4.0-HEAD is a
transitional naming convention. Future full releases, say 4.2, will have a release-4.2
branch which fulfills this role and the first point release (e.g. 4.2.0) will be made
immediately following the release branch creation.

2020 developments can be started from any trunk revision later than this one.

  • Property svn:keywords set to Id
File size: 21.4 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
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   LOGICAL,  PUBLIC ::  bmetexc     !: Use of excess carbon for respiration
53
54   !! * Substitutions
55#  include "do_loop_substitute.h90"
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, Kbb, Krhs )
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      INTEGER, INTENT(in) ::  Kbb, Krhs      ! time level indices
75      !
76      INTEGER  :: ji, jj, jk
77      REAL(wp) :: zcompadi, zcompaz , zcompaph, zcompapoc, zcompapon, zcompapop
78      REAL(wp) :: zcompapi, zgraze  , zdenom, zfact, zfood, zfoodlim
79      REAL(wp) :: ztmp1, ztmp2, ztmp3, ztmp4, ztmp5, ztmptot
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, zgraref, zgradoct, zgradont, zgradopt, zgrareft
83      REAL(wp) :: zexcess, zgraren, zgrarep, zgrarem
84      REAL(wp) :: zgrapoc, zgrapon, zgrapop, zgrapof, zprcaca, zmortz
85      REAL(wp) :: zrespz, ztortz, zgrasratf, zgrasratn, zgrasratp
86      REAL(wp) :: zgraznc, zgraznn, zgraznp, zgrazpoc, zgrazpon, zgrazpop, zgrazpof
87      REAL(wp) :: zgrazdc, zgrazdn, zgrazdp, zgrazdf, zgraznf, zgrazz
88      REAL(wp) :: zgrazpc, zgrazpn, zgrazpp, zgrazpf, zbeta, zrfact2, zmetexcess
89      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo, zzligprod
90      CHARACTER (len=25) :: charout
91      !!---------------------------------------------------------------------
92      !
93      IF( ln_timing )   CALL timing_start('p5z_micro')
94      !
95      zmetexcess = 0.0
96      IF ( bmetexc ) zmetexcess = 1.0
97      !
98      DO_3D_11_11( 1, jpkm1 )
99         zcompaz = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - 1.e-9 ), 0.e0 )
100         zfact   = xstep * tgfunc2(ji,jj,jk) * zcompaz
101
102         !   Michaelis-Menten mortality rates of microzooplankton
103         !   -----------------------------------------------------
104         zrespz = resrat * zfact * ( tr(ji,jj,jk,jpzoo,Kbb) / ( xkmort + tr(ji,jj,jk,jpzoo,Kbb) )  &
105         &        + 3. * nitrfac(ji,jj,jk) )
106
107         !   Zooplankton mortality. A square function has been selected with
108         !   no real reason except that it seems to be more stable and may mimic predation.
109         !   ------------------------------------------------------------------------------
110         ztortz = mzrat * 1.e6 * zfact * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk))
111
112         !   Computation of the abundance of the preys
113         !   A threshold can be specified in the namelist
114         !   --------------------------------------------
115         zcompadi  = MIN( MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthreshdia ), 0.e0 ), xsizedia )
116         zcompaph  = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthreshphy ), 0.e0 )
117         zcompaz   = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - xthreshzoo ), 0.e0 )
118         zcompapi  = MAX( ( tr(ji,jj,jk,jppic,Kbb) - xthreshpic ), 0.e0 )
119         zcompapoc = MAX( ( tr(ji,jj,jk,jppoc,Kbb) - xthreshpoc ), 0.e0 )
120         
121         !   Microzooplankton grazing
122         !   ------------------------
123         zfood     = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi   &
124         &           + xprefz * zcompaz + xprefp * zcompapi
125         zfoodlim  = MAX( 0. , zfood - min(xthresh,0.5*zfood) )
126         zdenom    = zfoodlim / ( xkgraz + zfoodlim )
127         zgraze    = grazrat * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk)) 
128
129         !   An active switching parameterization is used here.
130         !   We don't use the KTW parameterization proposed by
131         !   Vallina et al. because it tends to produce to steady biomass
132         !   composition and the variance of Chl is too low as it grazes
133         !   too strongly on winning organisms. Thus, instead of a square
134         !   a 1.5 power value is used which decreases the pressure on the
135         !   most abundant species
136         !   ------------------------------------------------------------ 
137         ztmp1 = xprefn * zcompaph**1.5
138         ztmp2 = xprefp * zcompapi**1.5
139         ztmp3 = xprefc * zcompapoc**1.5
140         ztmp4 = xprefd * zcompadi**1.5
141         ztmp5 = xprefz * zcompaz**1.5
142         ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn
143         ztmp1 = ztmp1 / ztmptot
144         ztmp2 = ztmp2 / ztmptot
145         ztmp3 = ztmp3 / ztmptot
146         ztmp4 = ztmp4 / ztmptot
147         ztmp5 = ztmp5 / ztmptot
148
149         !   Microzooplankton regular grazing on the different preys
150         !   -------------------------------------------------------
151         zgraznc   = zgraze  * ztmp1  * zdenom
152         zgraznn   = zgraznc * tr(ji,jj,jk,jpnph,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn)
153         zgraznp   = zgraznc * tr(ji,jj,jk,jppph,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn)
154         zgraznf   = zgraznc * tr(ji,jj,jk,jpnfe,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn)
155         zgrazpc   = zgraze  * ztmp2  * zdenom
156         zgrazpn   = zgrazpc * tr(ji,jj,jk,jpnpi,Kbb) / (tr(ji,jj,jk,jppic,Kbb) + rtrn)
157         zgrazpp   = zgrazpc * tr(ji,jj,jk,jpppi,Kbb) / (tr(ji,jj,jk,jppic,Kbb) + rtrn)
158         zgrazpf   = zgrazpc * tr(ji,jj,jk,jppfe,Kbb) / (tr(ji,jj,jk,jppic,Kbb) + rtrn)
159         zgrazz    = zgraze  * ztmp5   * zdenom
160         zgrazpoc  = zgraze  * ztmp3   * zdenom
161         zgrazpon  = zgrazpoc * tr(ji,jj,jk,jppon,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn )
162         zgrazpop  = zgrazpoc * tr(ji,jj,jk,jppop,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn )
163         zgrazpof  = zgrazpoc* tr(ji,jj,jk,jpsfe,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn)
164         zgrazdc   = zgraze  * ztmp4  * zdenom
165         zgrazdn   = zgrazdc * tr(ji,jj,jk,jpndi,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn)
166         zgrazdp   = zgrazdc * tr(ji,jj,jk,jppdi,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn)
167         zgrazdf   = zgrazdc * tr(ji,jj,jk,jpdfe,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn)
168         !
169         zgraztotc = zgraznc + zgrazpoc + zgrazdc + zgrazz + zgrazpc
170         zgraztotn = zgraznn + zgrazpn + zgrazpon + zgrazdn + zgrazz * no3rat3
171         zgraztotp = zgraznp + zgrazpp + zgrazpop + zgrazdp + zgrazz * po4rat3
172         zgraztotf = zgraznf + zgrazpf + zgrazpof + zgrazdf + zgrazz * ferat3
173         !
174         ! Grazing by microzooplankton
175         zgrazing(ji,jj,jk) = zgraztotc
176
177         !   Stoichiometruc ratios of the food ingested by zooplanton
178         !   --------------------------------------------------------
179         zgrasratf =  (zgraztotf + rtrn) / ( zgraztotc + rtrn )
180         zgrasratn =  (zgraztotn + rtrn) / ( zgraztotc + rtrn )
181         zgrasratp =  (zgraztotp + rtrn) / ( zgraztotc + rtrn )
182
183         !   Growth efficiency is made a function of the quality
184         !   and the quantity of the preys
185         !   ---------------------------------------------------
186         zepshert  = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3)
187         zbeta     = MAX( 0., (epsher - epshermin) )
188         zepsherf  = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta )
189         zepsherv  = zepsherf * zepshert
190
191         !   Respiration of microzooplankton
192         !   Excess carbon in the food is used preferentially
193         !   ------------------------------------------------
194         zexcess  = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess
195         zbasresb = MAX(0., zrespz - zexcess)
196         zbasresi = zexcess + MIN(0., zrespz - zexcess) 
197         zrespirc = srespir * zepsherv * zgraztotc + zbasresb
198         
199         !   When excess carbon is used, the other elements in excess
200         !   are also used proportionally to their abundance
201         !   --------------------------------------------------------
202         zexcess  = ( zgrasratn/ no3rat3 - zepshert ) / ( 1.0 - zepshert + rtrn)
203         zbasresn = zbasresi * zexcess * zgrasratn 
204         zexcess  = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn)
205         zbasresp = zbasresi * zexcess * zgrasratp
206         zexcess  = ( zgrasratf/ ferat3 - zepshert ) / ( 1.0 - zepshert + rtrn)
207         zbasresf = zbasresi * zexcess * zgrasratf
208
209         !   Voiding of the excessive elements as DOM
210         !   ----------------------------------------
211         zgradoct   = (1. - unassc - zepsherv) * zgraztotc - zbasresi 
212         zgradont   = (1. - unassn) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn
213         zgradopt   = (1. - unassp) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp
214         zgrareft   = (1. - unassc) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf
215
216         !  Since only semilabile DOM is represented in PISCES
217         !  part of DOM is in fact labile and is then released
218         !  as dissolved inorganic compounds (ssigma)
219         !  --------------------------------------------------
220         zgradoc =  zgradoct * ssigma
221         zgradon =  zgradont * ssigma
222         zgradop =  zgradopt * ssigma
223         zgrarem = (1.0 - ssigma) * zgradoct
224         zgraren = (1.0 - ssigma) * zgradont
225         zgrarep = (1.0 - ssigma) * zgradopt
226         zgraref = zgrareft
227
228         !   Defecation as a result of non assimilated products
229         !   --------------------------------------------------
230         zgrapoc   = zgraztotc * unassc
231         zgrapon   = zgraztotn * unassn
232         zgrapop   = zgraztotp * unassp
233         zgrapof   = zgraztotf * unassc
234
235         !  Addition of respiration to the release of inorganic nutrients
236         !  -------------------------------------------------------------
237         zgrarem = zgrarem + zbasresi + zrespirc
238         zgraren = zgraren + zbasresn + zrespirc * no3rat3
239         zgrarep = zgrarep + zbasresp + zrespirc * po4rat3
240         zgraref = zgraref + zbasresf + zrespirc * ferat3
241
242         !   Update of the TRA arrays
243         !   ------------------------
244         tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarep
245         tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zgraren
246         tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgradoc
247         !
248         IF( ln_ligand ) THEN
249            tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zgradoc * ldocz
250            zzligprod(ji,jj,jk) = zgradoc * ldocz
251         ENDIF
252         !
253         tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zgradon
254         tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zgradop
255         tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarem 
256         tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgraref
257         zfezoo(ji,jj,jk)    = zgraref
258         tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) + zepsherv * zgraztotc - zrespirc - ztortz - zgrazz
259         tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgraznc
260         tr(ji,jj,jk,jpnph,Krhs) = tr(ji,jj,jk,jpnph,Krhs) - zgraznn
261         tr(ji,jj,jk,jppph,Krhs) = tr(ji,jj,jk,jppph,Krhs) - zgraznp
262         tr(ji,jj,jk,jppic,Krhs) = tr(ji,jj,jk,jppic,Krhs) - zgrazpc
263         tr(ji,jj,jk,jpnpi,Krhs) = tr(ji,jj,jk,jpnpi,Krhs) - zgrazpn
264         tr(ji,jj,jk,jpppi,Krhs) = tr(ji,jj,jk,jpppi,Krhs) - zgrazpp
265         tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazdc
266         tr(ji,jj,jk,jpndi,Krhs) = tr(ji,jj,jk,jpndi,Krhs) - zgrazdn
267         tr(ji,jj,jk,jppdi,Krhs) = tr(ji,jj,jk,jppdi,Krhs) - zgrazdp
268         tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) - zgraznc * tr(ji,jj,jk,jpnch,Kbb)/(tr(ji,jj,jk,jpphy,Kbb)+rtrn)
269         tr(ji,jj,jk,jppch,Krhs) = tr(ji,jj,jk,jppch,Krhs) - zgrazpc * tr(ji,jj,jk,jppch,Kbb)/(tr(ji,jj,jk,jppic,Kbb)+rtrn)
270         tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) - zgrazdc * tr(ji,jj,jk,jpdch,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn)
271         tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zgrazdc * tr(ji,jj,jk,jpdsi,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn)
272         tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgrazdc * tr(ji,jj,jk,jpdsi,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn)
273         tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) - zgraznf
274         tr(ji,jj,jk,jppfe,Krhs) = tr(ji,jj,jk,jppfe,Krhs) - zgrazpf
275         tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zgrazdf
276         tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + ztortz + zgrapoc - zgrazpoc 
277         prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ztortz + zgrapoc
278         conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc
279         tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + no3rat3 * ztortz + zgrapon - zgrazpon
280         tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) + po4rat3 * ztortz + zgrapop - zgrazpop
281         tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + ferat3 * ztortz  + zgrapof - zgrazpof
282         !
283         ! calcite production
284         zprcaca = xfracal(ji,jj,jk) * zgraznc
285         prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo)
286         !
287         zprcaca = part * zprcaca
288         tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarem - zprcaca
289         tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - 2. * zprcaca     &
290         &                     + rno3 * zgraren
291         tr(ji,jj,jk,jpcal,Krhs) = tr(ji,jj,jk,jpcal,Krhs) + zprcaca
292      END_3D
293      !
294      IF( lk_iomput .AND. knt == nrdttrc ) THEN
295       IF( iom_use("GRAZ1") ) THEN  !   Total grazing of phyto by zooplankton
296           zgrazing(:,:,jpk) = 0._wp   ; CALL iom_put( "GRAZ1" , zgrazing(:,:,:) * 1.e+3  * rfact2r * tmask(:,:,:) ) 
297         ENDIF
298         IF( iom_use("FEZOO") ) THEN 
299           zfezoo (:,:,jpk) = 0._wp    ; CALL iom_put( "FEZOO" , zfezoo(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) )
300         ENDIF
301         IF( ln_ligand ) THEN
302            zzligprod(:,:,jpk) = 0._wp ; CALL iom_put( "LPRODZ", zzligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:))
303         ENDIF
304      ENDIF
305      !
306      IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging)
307         WRITE(charout, FMT="('micro')")
308         CALL prt_ctl_trc_info(charout)
309         CALL prt_ctl_trc(tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm)
310      ENDIF
311      !
312      IF( ln_timing )   CALL timing_stop('p5z_micro')
313      !
314   END SUBROUTINE p5z_micro
315
316
317   SUBROUTINE p5z_micro_init
318      !!----------------------------------------------------------------------
319      !!                  ***  ROUTINE p5z_micro_init  ***
320      !!
321      !! ** Purpose :   Initialization of microzooplankton parameters
322      !!
323      !! ** Method  :   Read the nampiszoo namelist and check the parameters
324      !!                called at the first timestep (nittrc000)
325      !!
326      !! ** input   :   Namelist nampiszoo
327      !!
328      !!----------------------------------------------------------------------
329      INTEGER ::   ios   ! Local integer
330      !!
331      NAMELIST/namp5zzoo/ part, grazrat, bmetexc, resrat, mzrat, xprefc, xprefn, &
332         &                xprefp, xprefd, xprefz, xthreshdia, xthreshphy, &
333         &                xthreshpic, xthreshpoc, xthreshzoo, xthresh, xkgraz, &
334         &                epsher, epshermin, ssigma, srespir, unassc, unassn, unassp
335      !!----------------------------------------------------------------------
336      !
337      READ  ( numnatp_ref, namp5zzoo, IOSTAT = ios, ERR = 901)
338901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zzoo in reference namelist' )
339      !
340      READ  ( numnatp_cfg, namp5zzoo, IOSTAT = ios, ERR = 902 )
341902   IF( ios >  0 ) CALL ctl_nam ( ios , 'namp5zzoo in configuration namelist' )
342      IF(lwm) WRITE ( numonp, namp5zzoo )
343      !
344      IF(lwp) THEN                         ! control print
345         WRITE(numout,*) ' '
346         WRITE(numout,*) ' Namelist parameters for microzooplankton, nampiszooq'
347         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
348         WRITE(numout,*) '    part of calcite not dissolved in microzoo guts  part        =', part
349         WRITE(numout,*) '    microzoo preference for POC                     xprefc     =', xprefc
350         WRITE(numout,*) '    microzoo preference for nano                    xprefn     =', xprefn
351         WRITE(numout,*) '    microzoo preference for pico                    xprefp     =', xprefp
352         WRITE(numout,*) '    microzoo preference for diatoms                 xprefd     =', xprefd
353         WRITE(numout,*) '    microzoo preference for microzoo                xprefz     =', xprefz
354         WRITE(numout,*) '    diatoms feeding threshold  for microzoo         xthreshdia  =', xthreshdia
355         WRITE(numout,*) '    nanophyto feeding threshold for microzoo        xthreshphy  =', xthreshphy
356         WRITE(numout,*) '    picophyto feeding threshold for microzoo        xthreshpic  =', xthreshpic
357         WRITE(numout,*) '    poc feeding threshold for microzoo              xthreshpoc  =', xthreshpoc
358         WRITE(numout,*) '    microzoo feeding threshold for microzoo         xthreshzoo  =', xthreshzoo
359         WRITE(numout,*) '    feeding threshold for microzooplankton          xthresh     =', xthresh
360         WRITE(numout,*) '    exsudation rate of microzooplankton             resrat      =', resrat
361         WRITE(numout,*) '    microzooplankton mortality rate                 mzrat       =', mzrat
362         WRITE(numout,*) '    maximal microzoo grazing rate                   grazrat     =', grazrat
363         WRITE(numout,*) '    C egested fraction of fodd by microzoo          unassc      =', unassc
364         WRITE(numout,*) '    N egested fraction of fodd by microzoo          unassn      =', unassn
365         WRITE(numout,*) '    P egested fraction of fodd by microzoo          unassp      =', unassp
366         WRITE(numout,*) '    Efficicency of microzoo growth                  epsher      =', epsher
367         WRITE(numout,*) '    Minimum Efficiency of Microzoo growth           epshermin   =', epshermin
368         WRITE(numout,*) '    Fraction excreted as semi-labile DOM            ssigma      =', ssigma
369         WRITE(numout,*) '    Active respiration                              srespir     =', srespir
370         WRITE(numout,*) '    half sturation constant for grazing 1           xkgraz      =', xkgraz
371         WRITE(numout,*) '    Use of excess carbon for respiration            bmetexc     =', bmetexc
372      ENDIF
373      !
374   END SUBROUTINE p5z_micro_init
375
376   !!======================================================================
377END MODULE p5zmicro
Note: See TracBrowser for help on using the repository browser.