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_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z – NEMO

source: NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p5zmicro.F90 @ 14219

Last change on this file since 14219 was 14219, checked in by mcastril, 4 years ago

Add Mixed Precision support by Oriol Tintó

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