1 | MODULE 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 | #if defined key_pisces_quota |
---|
12 | !!---------------------------------------------------------------------- |
---|
13 | !! 'key_pisces_quota' PISCES bio-model |
---|
14 | !!---------------------------------------------------------------------- |
---|
15 | !! p5z_micro : Compute the sources/sinks for microzooplankton |
---|
16 | !! p5z_micro_init : Initialize and read the appropriate namelist |
---|
17 | !!---------------------------------------------------------------------- |
---|
18 | USE oce_trc ! shared variables between ocean and passive tracers |
---|
19 | USE trc ! passive tracers common variables |
---|
20 | USE sms_pisces ! PISCES Source Minus Sink variables |
---|
21 | USE p5zsink ! vertical flux of particulate matter due to sinking |
---|
22 | USE p5zlim ! Phytoplankton limitation terms |
---|
23 | USE iom ! I/O manager |
---|
24 | USE prtctl_trc ! print control for debugging |
---|
25 | |
---|
26 | IMPLICIT NONE |
---|
27 | PRIVATE |
---|
28 | |
---|
29 | PUBLIC p5z_micro ! called in p5zbio.F90 |
---|
30 | PUBLIC p5z_micro_init ! called in trcsms_pisces.F90 |
---|
31 | |
---|
32 | !! * Shared module variables |
---|
33 | REAL(wp), PUBLIC :: part !: part of calcite not dissolved in microzoo guts |
---|
34 | REAL(wp), PUBLIC :: xprefc !: microzoo preference for POC |
---|
35 | REAL(wp), PUBLIC :: xprefn !: microzoo preference for nanophyto |
---|
36 | REAL(wp), PUBLIC :: xprefp !: microzoo preference for picophyto |
---|
37 | REAL(wp), PUBLIC :: xprefd !: microzoo preference for diatoms |
---|
38 | REAL(wp), PUBLIC :: xprefz !: microzoo preference for microzoo |
---|
39 | REAL(wp), PUBLIC :: xthreshdia !: diatoms feeding threshold for microzooplankton |
---|
40 | REAL(wp), PUBLIC :: xthreshpic !: picophyto feeding threshold for microzooplankton |
---|
41 | REAL(wp), PUBLIC :: xthreshphy !: nanophyto threshold for microzooplankton |
---|
42 | REAL(wp), PUBLIC :: xthreshzoo !: microzoo threshold for microzooplankton |
---|
43 | REAL(wp), PUBLIC :: xthreshpoc !: poc threshold for microzooplankton |
---|
44 | REAL(wp), PUBLIC :: xthresh !: feeding threshold for microzooplankton |
---|
45 | REAL(wp), PUBLIC :: resrat !: exsudation rate of microzooplankton |
---|
46 | REAL(wp), PUBLIC :: mzrat !: microzooplankton mortality rate |
---|
47 | REAL(wp), PUBLIC :: grazrat !: maximal microzoo grazing rate |
---|
48 | REAL(wp), PUBLIC :: xkgraz !: non assimilated fraction of P by microzoo |
---|
49 | REAL(wp), PUBLIC :: unassc !: Efficicency of microzoo growth |
---|
50 | REAL(wp), PUBLIC :: unassn !: Efficicency of microzoo growth |
---|
51 | REAL(wp), PUBLIC :: unassp !: Efficicency of microzoo growth |
---|
52 | REAL(wp), PUBLIC :: epsher !: half sturation constant for grazing 1 |
---|
53 | REAL(wp), PUBLIC :: srespir !: half sturation constant for grazing 1 |
---|
54 | REAL(wp), PUBLIC :: ssigma !: Fraction excreted as semi-labile DOM |
---|
55 | LOGICAL, PUBLIC :: bmetexc !: Use of excess carbon for respiration |
---|
56 | |
---|
57 | |
---|
58 | !!* Substitution |
---|
59 | # include "top_substitute.h90" |
---|
60 | !!---------------------------------------------------------------------- |
---|
61 | !! NEMO/TOP 3.3 , NEMO Consortium (2010) |
---|
62 | !! $Id: p4zmicro.F90 3160 2011-11-20 14:27:18Z cetlod $ |
---|
63 | !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) |
---|
64 | !!---------------------------------------------------------------------- |
---|
65 | |
---|
66 | CONTAINS |
---|
67 | |
---|
68 | SUBROUTINE p5z_micro( kt, knt ) |
---|
69 | !!--------------------------------------------------------------------- |
---|
70 | !! *** ROUTINE p5z_micro *** |
---|
71 | !! |
---|
72 | !! ** Purpose : Compute the sources/sinks for microzooplankton |
---|
73 | !! |
---|
74 | !! ** Method : - ??? |
---|
75 | !!--------------------------------------------------------------------- |
---|
76 | INTEGER, INTENT(in) :: kt ! ocean time step |
---|
77 | INTEGER, INTENT(in) :: knt |
---|
78 | ! |
---|
79 | INTEGER :: ji, jj, jk |
---|
80 | REAL(wp) :: zcompadi, zcompaz , zcompaph, zcompapoc, zcompapon, zcompapop |
---|
81 | REAL(wp) :: zcompapi, zgraze , zdenom, zfact, zstep, zfood, zfoodlim |
---|
82 | REAL(wp) :: ztmp1, ztmp2, ztmp3, ztmp4, ztmp5, ztmptot |
---|
83 | REAL(wp) :: zepsherf, zepshert, zepsherv, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi |
---|
84 | REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf, zbasresn, zbasresp, zbasresf |
---|
85 | REAL(wp) :: zgradoc, zgradon, zgradop, zgraref, zgradoct, zgradont, zgradopt, zgrareft |
---|
86 | REAL(wp) :: zexcess, zgraren, zgrarep, zgrarem |
---|
87 | REAL(wp) :: zgrapoc, zgrapon, zgrapop, zgrapof, zprcaca, zmortz |
---|
88 | REAL(wp) :: zrespz, ztortz, zgrasratf, zgrasratn, zgrasratp |
---|
89 | REAL(wp) :: zgraznc, zgraznn, zgraznp, zgrazpoc, zgrazpon, zgrazpop, zgrazpof |
---|
90 | REAL(wp) :: zgrazdc, zgrazdn, zgrazdp, zgrazdf, zgraznf, zgrazz |
---|
91 | REAL(wp) :: zgrazpc, zgrazpn, zgrazpp, zgrazpf, zbeta, zrfact2, zmetexcess |
---|
92 | REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d, zfezoo |
---|
93 | #if defined key_ligand |
---|
94 | REAL(wp), POINTER, DIMENSION(:,:,:) :: zzligprod |
---|
95 | #endif |
---|
96 | CHARACTER (len=25) :: charout |
---|
97 | !!--------------------------------------------------------------------- |
---|
98 | ! |
---|
99 | IF( nn_timing == 1 ) CALL timing_start('p5z_micro') |
---|
100 | ! |
---|
101 | CALL wrk_alloc( jpi, jpj, jpk, zgrazing, zfezoo ) |
---|
102 | zfezoo(:,:,:) = 0._wp |
---|
103 | #if defined key_ligand |
---|
104 | CALL wrk_alloc( jpi, jpj, jpk, zzligprod ) |
---|
105 | zzligprod(:,:,:) = 0._wp |
---|
106 | #endif |
---|
107 | ! |
---|
108 | zmetexcess = 0.0 |
---|
109 | IF ( bmetexc ) zmetexcess = 1.0 |
---|
110 | ! |
---|
111 | DO jk = 1, jpkm1 |
---|
112 | DO jj = 1, jpj |
---|
113 | DO ji = 1, jpi |
---|
114 | zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) |
---|
115 | zstep = xstep |
---|
116 | # if defined key_degrad |
---|
117 | zstep = zstep * facvol(ji,jj,jk) |
---|
118 | # endif |
---|
119 | zfact = zstep * tgfunc2(ji,jj,jk) * zcompaz |
---|
120 | |
---|
121 | ! Michaelis-Menten mortality rates of microzooplankton |
---|
122 | ! ----------------------------------------------------- |
---|
123 | zrespz = resrat * zfact * ( trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) ) & |
---|
124 | & + 3. * nitrfac(ji,jj,jk) ) |
---|
125 | |
---|
126 | ! Zooplankton mortality. A square function has been selected with |
---|
127 | ! no real reason except that it seems to be more stable and may mimic predation. |
---|
128 | ! ------------------------------------------------------------------------------ |
---|
129 | ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) |
---|
130 | |
---|
131 | ! Computation of the abundance of the preys |
---|
132 | ! A threshold can be specified in the namelist |
---|
133 | ! -------------------------------------------- |
---|
134 | zcompadi = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) |
---|
135 | zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) |
---|
136 | zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - xthreshzoo ), 0.e0 ) |
---|
137 | zcompapi = MAX( ( trb(ji,jj,jk,jppic) - xthreshpic ), 0.e0 ) |
---|
138 | zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) |
---|
139 | |
---|
140 | ! Microzooplankton grazing |
---|
141 | ! ------------------------ |
---|
142 | zfood = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi & |
---|
143 | & + xprefz * zcompaz + xprefp * zcompapi |
---|
144 | zfoodlim = MAX( 0. , zfood - min(xthresh,0.5*zfood) ) |
---|
145 | zdenom = zfoodlim / ( xkgraz + zfoodlim ) |
---|
146 | zgraze = grazrat * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) |
---|
147 | |
---|
148 | ! An active switching parameterization is used here. |
---|
149 | ! We don't use the KTW parameterization proposed by |
---|
150 | ! Vallina et al. because it tends to produce to steady biomass |
---|
151 | ! composition and the variance of Chl is too low as it grazes |
---|
152 | ! too strongly on winning organisms. Thus, instead of a square |
---|
153 | ! a 1.5 power value is used which decreases the pressure on the |
---|
154 | ! most abundant species |
---|
155 | ! ------------------------------------------------------------ |
---|
156 | ztmp1 = xprefn * zcompaph * ( 0.75 * zcompaph + 0.25 * zcompadi ) |
---|
157 | ztmp2 = xprefp * zcompapi * zcompapi |
---|
158 | ztmp3 = xprefc * zcompapoc * zcompapoc |
---|
159 | ztmp4 = xprefd * zcompadi * ( 0.75 * zcompadi + 0.25 * zcompaph ) |
---|
160 | ztmp5 = xprefz * zcompaz * zcompaz |
---|
161 | ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn |
---|
162 | ztmp1 = ztmp1 / ztmptot |
---|
163 | ztmp2 = ztmp2 / ztmptot |
---|
164 | ztmp3 = ztmp3 / ztmptot |
---|
165 | ztmp4 = ztmp4 / ztmptot |
---|
166 | ztmp5 = ztmp5 / ztmptot |
---|
167 | |
---|
168 | ! Microzooplankton regular grazing on the different preys |
---|
169 | ! ------------------------------------------------------- |
---|
170 | zgraznc = zgraze * ztmp1 * zdenom |
---|
171 | zgraznn = zgraznc * trb(ji,jj,jk,jpnph) / (trb(ji,jj,jk,jpphy) + rtrn) |
---|
172 | zgraznp = zgraznc * trb(ji,jj,jk,jppph) / (trb(ji,jj,jk,jpphy) + rtrn) |
---|
173 | zgraznf = zgraznc * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn) |
---|
174 | zgrazpc = zgraze * ztmp2 * zdenom |
---|
175 | zgrazpn = zgrazpc * trb(ji,jj,jk,jpnpi) / (trb(ji,jj,jk,jppic) + rtrn) |
---|
176 | zgrazpp = zgrazpc * trb(ji,jj,jk,jpppi) / (trb(ji,jj,jk,jppic) + rtrn) |
---|
177 | zgrazpf = zgrazpc * trb(ji,jj,jk,jppfe) / (trb(ji,jj,jk,jppic) + rtrn) |
---|
178 | zgrazz = zgraze * ztmp5 * zdenom |
---|
179 | zgrazpoc = zgraze * ztmp3 * zdenom |
---|
180 | zgrazpon = zgrazpoc * trb(ji,jj,jk,jppon) / ( trb(ji,jj,jk,jppoc) + rtrn ) |
---|
181 | zgrazpop = zgrazpoc * trb(ji,jj,jk,jppop) / ( trb(ji,jj,jk,jppoc) + rtrn ) |
---|
182 | zgrazpof = zgrazpoc* trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) |
---|
183 | zgrazdc = zgraze * ztmp4 * zdenom |
---|
184 | zgrazdn = zgrazdc * trb(ji,jj,jk,jpndi) / (trb(ji,jj,jk,jpdia) + rtrn) |
---|
185 | zgrazdp = zgrazdc * trb(ji,jj,jk,jppdi) / (trb(ji,jj,jk,jpdia) + rtrn) |
---|
186 | zgrazdf = zgrazdc * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn) |
---|
187 | ! |
---|
188 | zgraztotc = zgraznc + zgrazpoc + zgrazdc + zgrazz + zgrazpc |
---|
189 | zgraztotn = zgraznn + zgrazpn + zgrazpon + zgrazdn + zgrazz * no3rat3 |
---|
190 | zgraztotp = zgraznp + zgrazpp + zgrazpop + zgrazdp + zgrazz * po4rat3 |
---|
191 | zgraztotf = zgraznf + zgrazpf + zgrazpof + zgrazdf + zgrazz * ferat3 |
---|
192 | ! |
---|
193 | ! Grazing by microzooplankton |
---|
194 | IF( ln_diatrc .AND. lk_iomput ) zgrazing(ji,jj,jk) = zgraztotc |
---|
195 | |
---|
196 | ! Stoichiometruc ratios of the food ingested by zooplanton |
---|
197 | ! -------------------------------------------------------- |
---|
198 | zgrasratf = (zgraztotf + rtrn) / ( zgraztotc + rtrn ) |
---|
199 | zgrasratn = (zgraztotn + rtrn) / ( zgraztotc + rtrn ) |
---|
200 | zgrasratp = (zgraztotp + rtrn) / ( zgraztotc + rtrn ) |
---|
201 | |
---|
202 | ! Growth efficiency is made a function of the quality |
---|
203 | ! and the quantity of the preys |
---|
204 | ! --------------------------------------------------- |
---|
205 | zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) |
---|
206 | zbeta = 1./ (epsher - 0.2) |
---|
207 | zepsherf = 0.2 + 1./ (zbeta + 0.04 * 12. * zfood * 1E6 ) |
---|
208 | zepsherv = zepsherf * zepshert |
---|
209 | |
---|
210 | ! Respiration of microzooplankton |
---|
211 | ! Excess carbon in the food is used preferentially |
---|
212 | ! ------------------------------------------------ |
---|
213 | zexcess = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess |
---|
214 | zbasresb = MAX(0., zrespz - zexcess) |
---|
215 | zbasresi = zexcess + MIN(0., zrespz - zexcess) |
---|
216 | zrespirc = srespir * zepsherv * zgraztotc + zbasresb |
---|
217 | |
---|
218 | ! When excess carbon is used, the other elements in excess |
---|
219 | ! are also used proportionally to their abundance |
---|
220 | ! -------------------------------------------------------- |
---|
221 | zexcess = ( zgrasratn/ no3rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) |
---|
222 | zbasresn = zbasresi * zexcess * zgrasratn |
---|
223 | zexcess = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) |
---|
224 | zbasresp = zbasresi * zexcess * zgrasratp |
---|
225 | zexcess = ( zgrasratf/ ferat3 - zepshert ) / ( 1.0 - zepshert + rtrn) |
---|
226 | zbasresf = zbasresi * zexcess * zgrasratf |
---|
227 | |
---|
228 | ! Voiding of the excessive elements as DOM |
---|
229 | ! ---------------------------------------- |
---|
230 | zgradoct = (1. - unassc - zepsherv) * zgraztotc - zbasresi |
---|
231 | zgradont = (1. - unassn) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn |
---|
232 | zgradopt = (1. - unassp) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp |
---|
233 | zgrareft = (1. - unassc) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf |
---|
234 | |
---|
235 | ! Since only semilabile DOM is represented in PISCES |
---|
236 | ! part of DOM is in fact labile and is then released |
---|
237 | ! as dissolved inorganic compounds (ssigma) |
---|
238 | ! -------------------------------------------------- |
---|
239 | zgradoc = zgradoct * ssigma |
---|
240 | zgradon = zgradont * ssigma |
---|
241 | zgradop = zgradopt * ssigma |
---|
242 | zgrarem = (1.0 - ssigma) * zgradoct |
---|
243 | zgraren = (1.0 - ssigma) * zgradont |
---|
244 | zgrarep = (1.0 - ssigma) * zgradopt |
---|
245 | zgraref = zgrareft |
---|
246 | |
---|
247 | ! Defecation as a result of non assimilated products |
---|
248 | ! -------------------------------------------------- |
---|
249 | zgrapoc = zgraztotc * unassc |
---|
250 | zgrapon = zgraztotn * unassn |
---|
251 | zgrapop = zgraztotp * unassp |
---|
252 | zgrapof = zgraztotf * unassc |
---|
253 | |
---|
254 | ! Addition of respiration to the release of inorganic nutrients |
---|
255 | ! ------------------------------------------------------------- |
---|
256 | zgrarem = zgrarem + zbasresi + zrespirc |
---|
257 | zgraren = zgraren + zbasresn + zrespirc * no3rat3 |
---|
258 | zgrarep = zgrarep + zbasresp + zrespirc * po4rat3 |
---|
259 | zgraref = zgraref + zbasresf + zrespirc * ferat3 |
---|
260 | |
---|
261 | ! Update of the TRA arrays |
---|
262 | ! ------------------------ |
---|
263 | tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarep |
---|
264 | tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgraren |
---|
265 | tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc |
---|
266 | #if defined key_ligand |
---|
267 | tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz |
---|
268 | zzligprod(ji,jj,jk) = zgradoc * ldocz |
---|
269 | #endif |
---|
270 | tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon |
---|
271 | tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zgradop |
---|
272 | tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem |
---|
273 | tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref |
---|
274 | zfezoo(ji,jj,jk) = zgraref |
---|
275 | tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zepsherv * zgraztotc - zrespirc & |
---|
276 | & - ztortz - zgrazz |
---|
277 | tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgraznc |
---|
278 | tra(ji,jj,jk,jpnph) = tra(ji,jj,jk,jpnph) - zgraznn |
---|
279 | tra(ji,jj,jk,jppph) = tra(ji,jj,jk,jppph) - zgraznp |
---|
280 | tra(ji,jj,jk,jppic) = tra(ji,jj,jk,jppic) - zgrazpc |
---|
281 | tra(ji,jj,jk,jpnpi) = tra(ji,jj,jk,jpnpi) - zgrazpn |
---|
282 | tra(ji,jj,jk,jpppi) = tra(ji,jj,jk,jpppi) - zgrazpp |
---|
283 | tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazdc |
---|
284 | tra(ji,jj,jk,jpndi) = tra(ji,jj,jk,jpndi) - zgrazdn |
---|
285 | tra(ji,jj,jk,jppdi) = tra(ji,jj,jk,jppdi) - zgrazdp |
---|
286 | tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgraznc * trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) |
---|
287 | tra(ji,jj,jk,jppch) = tra(ji,jj,jk,jppch) - zgrazpc * trb(ji,jj,jk,jppch)/(trb(ji,jj,jk,jppic)+rtrn) |
---|
288 | tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazdc * trb(ji,jj,jk,jpdch)/(trb(ji,jj,jk,jpdia)+rtrn) |
---|
289 | tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazdc * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) |
---|
290 | tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazdc * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) |
---|
291 | tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf |
---|
292 | tra(ji,jj,jk,jppfe) = tra(ji,jj,jk,jppfe) - zgrazpf |
---|
293 | tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazdf |
---|
294 | tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + ztortz + zgrapoc - zgrazpoc |
---|
295 | prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ztortz + zgrapoc |
---|
296 | conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc |
---|
297 | tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + no3rat3 * ztortz + zgrapon - zgrazpon |
---|
298 | tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + po4rat3 * ztortz + zgrapop - zgrazpop |
---|
299 | tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * ztortz + zgrapof - zgrazpof |
---|
300 | #if defined key_kriest |
---|
301 | tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc * xkr_dmicro |
---|
302 | #endif |
---|
303 | ! |
---|
304 | ! calcite production |
---|
305 | zprcaca = xfracal(ji,jj,jk) * zgraznc |
---|
306 | prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) |
---|
307 | ! |
---|
308 | zprcaca = part * zprcaca |
---|
309 | tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem - zprcaca |
---|
310 | tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca & |
---|
311 | & + rno3 * zgraren |
---|
312 | tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca |
---|
313 | #if defined key_kriest |
---|
314 | tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ztortz * xkr_dmicro & |
---|
315 | - zgrazpoc * trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) |
---|
316 | #endif |
---|
317 | END DO |
---|
318 | END DO |
---|
319 | END DO |
---|
320 | ! |
---|
321 | IF( lk_iomput .AND. knt == nrdttrc ) THEN |
---|
322 | CALL wrk_alloc( jpi, jpj, jpk, zw3d ) |
---|
323 | IF( iom_use( "GRAZ1" ) ) THEN |
---|
324 | zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ! Total grazing of phyto by zooplankton |
---|
325 | CALL iom_put( "GRAZ1", zw3d ) |
---|
326 | ENDIF |
---|
327 | IF( iom_use( "FEZOO" ) ) THEN |
---|
328 | zw3d(:,:,:) = zfezoo(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ! |
---|
329 | CALL iom_put( "FEZOO", zw3d ) |
---|
330 | ENDIF |
---|
331 | #if defined key_ligand |
---|
332 | IF( iom_use( "LPRODZ" ) ) THEN |
---|
333 | zw3d(:,:,:) = zzligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) |
---|
334 | CALL iom_put( "LPRODZ" , zw3d ) |
---|
335 | ENDIF |
---|
336 | #endif |
---|
337 | CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) |
---|
338 | ENDIF |
---|
339 | ! |
---|
340 | IF(ln_ctl) THEN ! print mean trends (used for debugging) |
---|
341 | WRITE(charout, FMT="('micro')") |
---|
342 | CALL prt_ctl_trc_info(charout) |
---|
343 | CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) |
---|
344 | ENDIF |
---|
345 | ! |
---|
346 | CALL wrk_dealloc( jpi, jpj, jpk, zgrazing, zfezoo ) |
---|
347 | #if defined key_ligand |
---|
348 | CALL wrk_dealloc( jpi, jpj, jpk, zzligprod ) |
---|
349 | #endif |
---|
350 | ! |
---|
351 | IF( nn_timing == 1 ) CALL timing_stop('p5z_micro') |
---|
352 | ! |
---|
353 | END SUBROUTINE p5z_micro |
---|
354 | |
---|
355 | |
---|
356 | SUBROUTINE p5z_micro_init |
---|
357 | |
---|
358 | !!---------------------------------------------------------------------- |
---|
359 | !! *** ROUTINE p5z_micro_init *** |
---|
360 | !! |
---|
361 | !! ** Purpose : Initialization of microzooplankton parameters |
---|
362 | !! |
---|
363 | !! ** Method : Read the nampiszoo namelist and check the parameters |
---|
364 | !! called at the first timestep (nittrc000) |
---|
365 | !! |
---|
366 | !! ** input : Namelist nampiszoo |
---|
367 | !! |
---|
368 | !!---------------------------------------------------------------------- |
---|
369 | |
---|
370 | NAMELIST/nampiszoo/ part, grazrat, bmetexc, resrat, mzrat, xprefc, xprefn, & |
---|
371 | & xprefp, xprefd, xprefz, xthreshdia, xthreshphy, & |
---|
372 | & xthreshpic, xthreshpoc, xthreshzoo, xthresh, xkgraz, & |
---|
373 | & epsher, ssigma, srespir, unassc, unassn, unassp |
---|
374 | |
---|
375 | INTEGER :: ios ! Local integer output status for namelist read |
---|
376 | |
---|
377 | REWIND( numnatp_ref ) ! Namelist nampiszoo in reference namelist : Pisces microzooplankton |
---|
378 | READ ( numnatp_ref, nampiszoo, IOSTAT = ios, ERR = 901) |
---|
379 | 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiszoo in reference namelist', lwp ) |
---|
380 | |
---|
381 | REWIND( numnatp_cfg ) ! Namelist nampiszoo in configuration namelist : Pisces microzooplankton |
---|
382 | READ ( numnatp_cfg, nampiszoo, IOSTAT = ios, ERR = 902 ) |
---|
383 | 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiszoo in configuration namelist', lwp ) |
---|
384 | IF(lwm) WRITE ( numonp, nampiszoo ) |
---|
385 | |
---|
386 | IF(lwp) THEN ! control print |
---|
387 | WRITE(numout,*) ' ' |
---|
388 | WRITE(numout,*) ' Namelist parameters for microzooplankton, nampiszoo' |
---|
389 | WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' |
---|
390 | WRITE(numout,*) ' part of calcite not dissolved in microzoo guts part =', part |
---|
391 | WRITE(numout,*) ' microzoo preference for POC xprefc =', xprefc |
---|
392 | WRITE(numout,*) ' microzoo preference for nano xprefn =', xprefn |
---|
393 | WRITE(numout,*) ' microzoo preference for pico xprefp =', xprefp |
---|
394 | WRITE(numout,*) ' microzoo preference for diatoms xprefd =', xprefd |
---|
395 | WRITE(numout,*) ' microzoo preference for microzoo xprefz =', xprefz |
---|
396 | WRITE(numout,*) ' diatoms feeding threshold for microzoo xthreshdia =', xthreshdia |
---|
397 | WRITE(numout,*) ' nanophyto feeding threshold for microzoo xthreshphy =', xthreshphy |
---|
398 | WRITE(numout,*) ' picophyto feeding threshold for microzoo xthreshpic =', xthreshpic |
---|
399 | WRITE(numout,*) ' poc feeding threshold for microzoo xthreshpoc =', xthreshpoc |
---|
400 | WRITE(numout,*) ' microzoo feeding threshold for microzoo xthreshzoo =', xthreshzoo |
---|
401 | WRITE(numout,*) ' feeding threshold for microzooplankton xthresh =', xthresh |
---|
402 | WRITE(numout,*) ' exsudation rate of microzooplankton resrat =', resrat |
---|
403 | WRITE(numout,*) ' microzooplankton mortality rate mzrat =', mzrat |
---|
404 | WRITE(numout,*) ' maximal microzoo grazing rate grazrat =', grazrat |
---|
405 | WRITE(numout,*) ' C egested fraction of fodd by microzoo unassc =', unassc |
---|
406 | WRITE(numout,*) ' N egested fraction of fodd by microzoo unassn =', unassn |
---|
407 | WRITE(numout,*) ' P egested fraction of fodd by microzoo unassp =', unassp |
---|
408 | WRITE(numout,*) ' Efficicency of microzoo growth epsher =', epsher |
---|
409 | WRITE(numout,*) ' Fraction excreted as semi-labile DOM ssigma =', ssigma |
---|
410 | WRITE(numout,*) ' Active respiration srespir =', srespir |
---|
411 | WRITE(numout,*) ' half sturation constant for grazing 1 xkgraz =', xkgraz |
---|
412 | WRITE(numout,*) ' Use of excess carbon for respiration bmetexc =', bmetexc |
---|
413 | ENDIF |
---|
414 | |
---|
415 | END SUBROUTINE p5z_micro_init |
---|
416 | |
---|
417 | #else |
---|
418 | !!====================================================================== |
---|
419 | !! Dummy module : No PISCES bio-model |
---|
420 | !!====================================================================== |
---|
421 | CONTAINS |
---|
422 | SUBROUTINE p5z_micro ! Empty routine |
---|
423 | END SUBROUTINE p5z_micro |
---|
424 | #endif |
---|
425 | |
---|
426 | !!====================================================================== |
---|
427 | END MODULE p5zmicro |
---|