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.
phytoplankton.F90 in branches/UKMO/dev_r5518_GO6_under_ice_relax_dr_hook/NEMOGCM/NEMO/TOP_SRC/MEDUSA – NEMO

source: branches/UKMO/dev_r5518_GO6_under_ice_relax_dr_hook/NEMOGCM/NEMO/TOP_SRC/MEDUSA/phytoplankton.F90 @ 11738

Last change on this file since 11738 was 11738, checked in by marc, 5 years ago

The Dr Hook changes from my perl code.

File size: 22.8 KB
Line 
1MODULE phytoplankton_mod
2   !!======================================================================
3   !!                         ***  MODULE phytoplankton_mod  ***
4   !! Calculates phytoplankton growth
5   !!======================================================================
6   !! History :
7   !!   -   ! 2017-04 (M. Stringer)        Code taken from trcbio_medusa.F90
8   !!   -   ! 2017-08 (A. Yool)            Mean mixed layer chlorophyll
9   !!----------------------------------------------------------------------
10#if defined key_medusa
11   !!----------------------------------------------------------------------
12   !!                                                   MEDUSA bio-model
13   !!----------------------------------------------------------------------
14
15   USE yomhook, ONLY: lhook, dr_hook
16   USE parkind1, ONLY: jprb, jpim
17
18   IMPLICIT NONE
19   PRIVATE
20     
21   PUBLIC   phytoplankton        ! Called in plankton.F90
22
23   !!----------------------------------------------------------------------
24   !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)
25   !! $Id$
26   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
27   !!----------------------------------------------------------------------
28
29CONTAINS
30
31   SUBROUTINE phytoplankton( jk )
32      !!---------------------------------------------------------------------
33      !!                     ***  ROUTINE phytoplankton  ***
34      !! This called from PLANKTON and calculates the phytoplankton
35      !! growth.
36      !!----------------------------------------------------------------------
37      USE bio_medusa_mod,    ONLY: fdep1, ffld, ffln2,                   &
38                                   fjlim_pd, fjlim_pn,                   &
39                                   fnld, fnln,                           &
40                                   fprd, fprd_ml, fprds,                 &
41                                   fprn, fprn_ml, frd, frn,              &
42                                   fsin, fsld, fsld2, fthetad, fthetan,  & 
43                                   ftot_det, ftot_dtc, ftot_pd,          &
44                                   ftot_pn, ftot_zme, ftot_zmi,          &
45                                   fun_Q10, fun_T, idf, idfval,          &
46                                   zchd, zchn, zdet, zdin, zdtc,         &
47                                   zfer, zpds, zphd, zphn, zsil,         &
48                                   zzme, zzmi, fchl_ml
49      USE dom_oce,           ONLY: e3t_0, gdepw_0, tmask
50#if defined key_vvl
51      USE dom_oce,           ONLY: e3t_n, gdepw_n
52#endif
53      USE in_out_manager,    ONLY: lwp, numout
54      USE oce,               ONLY: tsn
55      USE par_kind,          ONLY: wp
56      USE par_oce,           ONLY: jp_tem, jpi, jpim1, jpj, jpjm1
57      USE phycst,            ONLY: rsmall
58      USE sms_medusa,        ONLY: jliebig, jphy, jq10,                  &
59                                   xald, xaln, xfld, xfln,               &
60                                   xnld, xnln, xnsi0, xpar,              &
61                                   xsin0, xsld, xthetam, xthetamd, xuif, &
62                                   xvpd, xvpn, xxi
63      USE zdfmxl,            ONLY: hmld
64      USE lbclnk,            ONLY: lbc_lnk
65
66   !!* Substitution
67#  include "domzgr_substitute.h90"
68
69      !! Level
70      INTEGER, INTENT( in ) :: jk
71
72      INTEGER :: ji, jj
73
74      REAL(wp), DIMENSION(jpi,jpj) :: faln, fchn, fjln
75      REAL(wp), DIMENSION(jpi,jpj) :: fald, fchd, fjld
76      REAL(wp)                     :: fchn1, fchd1
77      !! AXY (03/02/11): add in Liebig terms
78      REAL(wp)                     :: fpnlim, fpdlim
79      !! AXY (16/07/09): add in Eppley curve functionality
80      REAL(wp)                     :: xvpnT,xvpdT
81      !! silicon cycle
82      REAL(wp)                     :: fnsi
83
84      REAL(wp)                     :: fsin1, fnsi1, fnsi2
85      REAL(wp)                     :: fq0
86      INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0
87      INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1
88      REAL(KIND=jprb)               :: zhook_handle
89
90      CHARACTER(LEN=*), PARAMETER :: RoutineName='PHYTOPLANKTON'
91
92      IF (lhook) CALL dr_hook(RoutineName,zhook_in,zhook_handle)
93
94
95      DO jj = 2,jpjm1
96         DO ji = 2,jpim1
97            !! OPEN wet point IF..THEN loop
98            if (tmask(ji,jj,jk) == 1) then
99               !!----------------------------------------------------------
100               !! Chlorophyll calculations
101               !!----------------------------------------------------------
102               !!
103               !! non-diatoms
104          if (zphn(ji,jj).GT.rsmall) then
105                  fthetan(ji,jj) = max(tiny(zchn(ji,jj)),                    &
106                                       (zchn(ji,jj) * xxi) /                 &
107                                       (zphn(ji,jj) + tiny(zphn(ji,jj))))
108                  faln(ji,jj)    = xaln * fthetan(ji,jj)
109               else
110                  fthetan(ji,jj) = 0.
111                  faln(ji,jj)    = 0.
112               endif
113               !!
114               !! diatoms
115          if (zphd(ji,jj).GT.rsmall) then
116                  fthetad(ji,jj) = max(tiny(zchd(ji,jj)),                   &
117                                       (zchd(ji,jj) * xxi) /                &
118                                       (zphd(ji,jj) + tiny(zphd(ji,jj))))
119                  fald(ji,jj)    = xald * fthetad(ji,jj)
120               else
121                  fthetad(ji,jj) = 0.
122                  fald(ji,jj)    = 0.
123               endif
124
125# if defined key_debug_medusa
126               !! report biological calculations
127               if (idf.eq.1.AND.idfval.eq.1) then
128                  IF (lwp) write (numout,*) '------------------------------'
129                  IF (lwp) write (numout,*) 'faln(',jk,') = ', faln(ji,jj)
130                  IF (lwp) write (numout,*) 'fald(',jk,') = ', fald(ji,jj)
131               endif
132# endif
133            ENDIF
134         ENDDO
135      ENDDO
136
137      DO jj = 2,jpjm1
138         DO ji = 2,jpim1
139            if (tmask(ji,jj,jk) == 1) then
140               !!----------------------------------------------------------
141               !! Phytoplankton light limitation
142               !!----------------------------------------------------------
143               !!
144               !! It is assumed xpar is the depth-averaged (vertical layer) PAR
145               !! Light limitation (check self-shading) in W/m2
146               !!
147               !! Note that there is no temperature dependence in phytoplankton
148               !! growth rate or any other function.
149               !! In calculation of Chl/Phy ratio tiny(phyto) is introduced to
150               !! avoid NaNs in case of Phy==0. 
151               !!
152               !! fthetad and fthetan are Chl:C ratio (gChl/gC) in diat and
153               !! non-diat:
154               !! for 1:1 Chl:P ratio (mgChl/mmolN) theta=0.012
155               !!
156               !! AXY (16/07/09)
157               !! temperature for new Eppley style phytoplankton growth
158               fun_T(ji,jj)   = 1.066**(1.0 * tsn(ji,jj,jk,jp_tem))
159               !! AXY (16/05/11): add in new Q10 (1.5, not 2.0) for
160               !!                 phytoplankton growth; remin. unaffected
161               fun_Q10(ji,jj) = jq10**((tsn(ji,jj,jk,jp_tem) - 0.0) / 10.0)
162               if (jphy.eq.1) then
163                  xvpnT = xvpn * fun_T(ji,jj)
164                  xvpdT = xvpd * fun_T(ji,jj)
165               elseif (jphy.eq.2) then
166                  xvpnT = xvpn * fun_Q10(ji,jj)
167                  xvpdT = xvpd * fun_Q10(ji,jj)
168               else
169                  xvpnT = xvpn
170                  xvpdT = xvpd
171               endif
172               !!
173               !! non-diatoms
174               fchn1 = (xvpnT * xvpnT) +                                     &
175                       (faln(ji,jj) * faln(ji,jj) * xpar(ji,jj,jk) *         &
176                        xpar(ji,jj,jk))
177               if (fchn1.GT.rsmall) then
178                  fchn(ji,jj) = xvpnT / (sqrt(fchn1) + tiny(fchn1))
179               else
180                  fchn(ji,jj) = 0.
181               endif
182               !! non-diatom J term
183               fjln(ji,jj)     = fchn(ji,jj) * faln(ji,jj) * xpar(ji,jj,jk)
184               fjlim_pn(ji,jj) = fjln(ji,jj) / xvpnT
185               !!
186               !! diatoms
187               fchd1 = (xvpdT * xvpdT) +                                     &
188                       (fald(ji,jj) * fald(ji,jj) * xpar(ji,jj,jk) *         &
189                        xpar(ji,jj,jk))
190               if (fchd1.GT.rsmall) then
191                  fchd(ji,jj) = xvpdT / (sqrt(fchd1) + tiny(fchd1))
192               else
193                  fchd(ji,jj) = 0.
194               endif
195               !! diatom J term
196               fjld(ji,jj)    = fchd(ji,jj) * fald(ji,jj) * xpar(ji,jj,jk)
197               fjlim_pd(ji,jj) = fjld(ji,jj) / xvpdT
198     
199# if defined key_debug_medusa
200               !! report phytoplankton light limitation
201               if (idf.eq.1.AND.idfval.eq.1) then
202                  IF (lwp) write (numout,*) '------------------------------'
203                  IF (lwp) write (numout,*) 'fchn(',jk,') = ', fchn(ji,jj)
204                  IF (lwp) write (numout,*) 'fchd(',jk,') = ', fchd(ji,jj)
205                  IF (lwp) write (numout,*) 'fjln(',jk,') = ', fjln(ji,jj)
206                  IF (lwp) write (numout,*) 'fjld(',jk,') = ', fjld(ji,jj)
207               endif
208# endif
209            ENDIF
210         ENDDO
211      ENDDO
212
213      DO jj = 2,jpjm1
214         DO ji = 2,jpim1
215            if (tmask(ji,jj,jk) == 1) then
216               !!----------------------------------------------------------
217               !! Phytoplankton nutrient limitation
218               !!----------------------------------------------------------
219               !!
220               !! non-diatoms (N, Fe).
221               !! non-diatom Qn term
222               fnln(ji,jj)  = zdin(ji,jj) / (zdin(ji,jj) + xnln)
223               !! non-diatom Qf term
224               ffln2(ji,jj) = zfer(ji,jj) / (zfer(ji,jj) + xfln)
225               !!
226               !! diatoms (N, Si, Fe).
227               !! diatom Qn term
228               fnld(ji,jj) = zdin(ji,jj) / (zdin(ji,jj) + xnld)
229               !! diatom Qs term
230               fsld(ji,jj) = zsil(ji,jj) / (zsil(ji,jj) + xsld)
231               !! diatom Qf term
232               ffld(ji,jj) = zfer(ji,jj) / (zfer(ji,jj) + xfld)
233
234# if defined key_debug_medusa
235               !! report phytoplankton nutrient limitation
236               if (idf.eq.1.AND.idfval.eq.1) then
237                  IF (lwp) write (numout,*) '------------------------------'
238                  IF (lwp) write (numout,*) 'fnln(',jk,') = ', fnln(ji,jj)
239                  IF (lwp) write (numout,*) 'fnld(',jk,') = ', fnld(ji,jj)
240                  IF (lwp) write (numout,*) 'ffln2(',jk,') = ', ffln2(ji,jj)
241                  IF (lwp) write (numout,*) 'ffld(',jk,') = ', ffld(ji,jj)
242                  IF (lwp) write (numout,*) 'fsld(',jk,') = ', fsld(ji,jj)
243               endif
244# endif
245            ENDIF
246         ENDDO
247      ENDDO
248
249      DO jj = 2,jpjm1
250         DO ji = 2,jpim1
251            if (tmask(ji,jj,jk) == 1) then
252               !!----------------------------------------------------------
253               !! Primary production (non-diatoms)
254               !! (note: still needs multiplying by phytoplankton
255               !! concentration)
256               !!----------------------------------------------------------
257               !!
258               if (jliebig .eq. 0) then
259                  !! multiplicative nutrient limitation
260                  fpnlim = fnln(ji,jj) * ffln2(ji,jj)
261               elseif (jliebig .eq. 1) then
262                  !! Liebig Law (= most limiting) nutrient limitation
263                  fpnlim = min(fnln(ji,jj), ffln2(ji,jj))
264               endif
265               fprn(ji,jj) = fjln(ji,jj) * fpnlim
266            ENDIF
267         ENDDO
268      ENDDO
269
270      DO jj = 2,jpjm1
271         DO ji = 2,jpim1
272            if (tmask(ji,jj,jk) == 1) then
273               !!----------------------------------------------------------
274               !! Primary production (diatoms)
275               !! (note: still needs multiplying by phytoplankton
276               !! concentration)
277               !!
278               !! Production here is split between nitrogen production and
279               !! that of silicon; depending upon the "intracellular" ratio
280               !! of Si:N, model diatoms will uptake nitrogen/silicon
281               !! differentially; this borrows from the diatom model of
282               !! Mongin et al. (2006)
283               !!----------------------------------------------------------
284               !!
285               if (jliebig .eq. 0) then
286                  !! multiplicative nutrient limitation
287                  fpdlim = fnld(ji,jj) * ffld(ji,jj)
288               elseif (jliebig .eq. 1) then
289                  !! Liebig Law (= most limiting) nutrient limitation
290                  fpdlim = min(fnld(ji,jj), ffld(ji,jj))
291               endif
292               !!
293          if (zphd(ji,jj).GT.rsmall .AND. zpds(ji,jj).GT.rsmall) then
294                  !! "intracellular" elemental ratios
295                  ! fsin(ji,jj)  = zpds(ji,jj) / (zphd(ji,jj) +              &
296                  !                               tiny(zphd(ji,jj)))
297                  ! fnsi         = zphd(ji,jj) / (zpds(ji,jj) +              &
298                  !                               tiny(zpds(ji,jj)))
299                  fsin(ji,jj) = 0.0
300                  IF( zphd(ji,jj) .GT. rsmall) fsin(ji,jj)  = zpds(ji,jj) /  &
301                                                              zphd(ji,jj)
302                  fnsi = 0.0
303                  IF( zpds(ji,jj) .GT. rsmall) fnsi  = zphd(ji,jj) /         &
304                                                       zpds(ji,jj)
305                  !! AXY (23/02/10): these next variables derive from
306                  !! Mongin et al. (2003)
307                  fsin1 = 3.0 * xsin0 !! = 0.6
308                  fnsi1 = 1.0 / fsin1 !! = 1.667
309                  fnsi2 = 1.0 / xsin0 !! = 5.0
310                  !!
311                  !! conditionalities based on ratios
312                  !! nitrogen (and iron and carbon)
313                  if (fsin(ji,jj).le.xsin0) then
314                     fprd(ji,jj)  = 0.0
315                     fsld2(ji,jj) = 0.0
316                  elseif (fsin(ji,jj).lt.fsin1) then
317                     fprd(ji,jj)  = xuif * ((fsin(ji,jj) - xsin0) /          &
318                                            (fsin(ji,jj) +                   &
319                                             tiny(fsin(ji,jj)))) *           &
320                                    (fjld(ji,jj) * fpdlim)
321                     fsld2(ji,jj) = xuif * ((fsin(ji,jj) - xsin0) /          &
322                                            (fsin(ji,jj) +                   &
323                                             tiny(fsin(ji,jj))))
324                  elseif (fsin(ji,jj).ge.fsin1) then
325                     fprd(ji,jj)  = (fjld(ji,jj) * fpdlim)
326                     fsld2(ji,jj) = 1.0
327                  endif
328                  !!
329                  !! silicon
330                  if (fsin(ji,jj).lt.fnsi1) then
331                     fprds(ji,jj) = (fjld(ji,jj) * fsld(ji,jj))
332                  elseif (fsin(ji,jj).lt.fnsi2) then
333                     fprds(ji,jj) = xuif * ((fnsi - xnsi0) /          &
334                                            (fnsi + tiny(fnsi))) *           &
335                                    (fjld(ji,jj) * fsld(ji,jj))
336                  else
337                     fprds(ji,jj) = 0.0
338                  endif     
339               else
340                  fsin(ji,jj)  = 0.0
341                  fnsi         = 0.0
342                  fprd(ji,jj)  = 0.0
343                  fsld2(ji,jj) = 0.0
344                  fprds(ji,jj) = 0.0
345               endif
346
347# if defined key_debug_medusa
348               !! report phytoplankton growth (including diatom silicon
349               !! submodel)
350               if (idf.eq.1.AND.idfval.eq.1) then
351                  IF (lwp) write (numout,*) '------------------------------'
352                  IF (lwp) write (numout,*) 'fsin(',jk,')   = ', fsin(ji,jj)
353                  IF (lwp) write (numout,*) 'fnsi(',jk,')   = ', fnsi
354                  IF (lwp) write (numout,*) 'fsld2(',jk,')  = ', fsld2(ji,jj)
355                  IF (lwp) write (numout,*) 'fprn(',jk,')   = ', fprn(ji,jj)
356                  IF (lwp) write (numout,*) 'fprd(',jk,')   = ', fprd(ji,jj)
357                  IF (lwp) write (numout,*) 'fprds(',jk,')  = ', fprds(ji,jj)
358               endif
359# endif
360            ENDIF
361         ENDDO
362      ENDDO
363
364      DO jj = 2,jpjm1
365         DO ji = 2,jpim1
366            if (tmask(ji,jj,jk) == 1) then
367               !!----------------------------------------------------------
368               !! Mixed layer primary production
369               !! this block calculates the amount of primary production
370               !! that occurs within the upper mixed layer; this allows the
371               !! separate diagnosis of "sub-surface" primary production; it
372               !! does assume that short-term variability in mixed layer
373               !! depth doesn't mess with things though
374               !!----------------------------------------------------------
375               !!
376               if (fdep1(ji,jj).le.hmld(ji,jj)) then
377                  !! this level is entirely in the mixed layer
378                  fq0 = 1.0
379               elseif (fsdepw(ji,jj,jk).ge.hmld(ji,jj)) then
380                  !! this level is entirely below the mixed layer
381                  fq0 = 0.0
382               else
383                  !! this level straddles the mixed layer
384                  fq0 = (hmld(ji,jj) - fsdepw(ji,jj,jk)) / fse3t(ji,jj,jk)
385               endif
386               !!
387               fprn_ml(ji,jj) = fprn_ml(ji,jj) + (fprn(ji,jj) * zphn(ji,jj) * &
388                                                  fse3t(ji,jj,jk) * fq0)
389               fprd_ml(ji,jj) = fprd_ml(ji,jj) + (fprd(ji,jj) * zphd(ji,jj) * &
390                                                  fse3t(ji,jj,jk) * fq0)
391          !! AXY (16/08/17)
392          fchl_ml(ji,jj) = fchl_ml(ji,jj) + ((zchn(ji,jj) + zchd(ji,jj)) * &
393                                             (fse3t(ji,jj,jk) * fq0) / hmld(ji,jj))
394            ENDIF
395         ENDDO
396      ENDDO
397      CALL lbc_lnk(fchl_ml(:,:),'T',1. )
398
399      DO jj = 2,jpjm1
400         DO ji = 2,jpim1
401            if (tmask(ji,jj,jk) == 1) then
402               !!----------------------------------------------------------
403               !! Vertical Integral --
404               !!----------------------------------------------------------
405               !! vertical integral non-diatom phytoplankton
406               ftot_pn(ji,jj)  = ftot_pn(ji,jj)  + (zphn(ji,jj) *             &
407                                                    fse3t(ji,jj,jk))
408               !! vertical integral diatom phytoplankton
409               ftot_pd(ji,jj)  = ftot_pd(ji,jj)  + (zphd(ji,jj) *             &
410                                                    fse3t(ji,jj,jk))
411               !! vertical integral microzooplankton
412               ftot_zmi(ji,jj) = ftot_zmi(ji,jj) + (zzmi(ji,jj) *             &
413                                                    fse3t(ji,jj,jk))
414               !! vertical integral mesozooplankton
415               ftot_zme(ji,jj) = ftot_zme(ji,jj) + (zzme(ji,jj) *             &
416                                                    fse3t(ji,jj,jk))
417               !! vertical integral slow detritus, nitrogen
418               ftot_det(ji,jj) = ftot_det(ji,jj) + (zdet(ji,jj) *             &
419                                                    fse3t(ji,jj,jk))
420               !! vertical integral slow detritus, carbon
421               ftot_dtc(ji,jj) = ftot_dtc(ji,jj) + (zdtc(ji,jj) *             &
422                                                    fse3t(ji,jj,jk))
423            ENDIF
424         ENDDO
425      ENDDO
426
427      DO jj = 2,jpjm1
428         DO ji = 2,jpim1
429            if (tmask(ji,jj,jk) == 1) then
430               !!----------------------------------------------------------
431               !! More chlorophyll calculations
432               !!----------------------------------------------------------
433               !!
434               !! frn(ji,jj) = (xthetam / fthetan(ji,jj)) *                   &
435               !!              (fprn(ji,jj) / (fthetan(ji,jj) * xpar(ji,jj,jk)))
436               !! frd(ji,jj) = (xthetam / fthetad(ji,jj)) *                   &
437               !!              (fprd(ji,jj) / (fthetad(ji,jj) * xpar(ji,jj,jk)))
438               frn(ji,jj) = (xthetam * fchn(ji,jj) * fnln(ji,jj) *            &
439                             ffln2(ji,jj)) / (fthetan(ji,jj) +                &
440                                             tiny(fthetan(ji,jj)))
441               !! AXY (12/05/09): there's potentially a problem here; fsld,
442               !!   silicic acid limitation, is used in the following line
443               !!   to regulate chlorophyll growth in a manner that is
444               !!   inconsistent with its use in the regulation of biomass
445               !!   growth; the Mongin term term used in growth is more
446               !!   complex than the simple multiplicative function used
447               !!   below
448               !! frd(ji,jj) = (xthetam * fchd(ji,jj) * fnld(ji,jj) *        &
449               !!               ffld(ji,jj) * fsld(ji,jj)) /                 &
450               !!               (fthetad(ji,jj) + tiny(fthetad(ji,jj)))
451               !! AXY (12/05/09): this replacement line uses the new
452               !!   variable, fsld2, to regulate chlorophyll growth
453               frd(ji,jj) = (xthetamd * fchd(ji,jj) * fnld(ji,jj) *          &
454                             ffld(ji,jj) * fsld2(ji,jj)) /                   &
455                             (fthetad(ji,jj) + tiny(fthetad(ji,jj)))
456
457# if defined key_debug_medusa
458               !! report chlorophyll calculations
459               if (idf.eq.1.AND.idfval.eq.1) then
460                  IF (lwp) write (numout,*) '------------------------------'
461                  IF (lwp) write (numout,*) 'fthetan(',jk,') = ', fthetan(ji,jj)
462                  IF (lwp) write (numout,*) 'fthetad(',jk,') = ', fthetad(ji,jj)
463                  IF (lwp) write (numout,*) 'frn(',jk,')     = ', frn(ji,jj)
464                  IF (lwp) write (numout,*) 'frd(',jk,')     = ', frd(ji,jj)
465               endif
466# endif
467
468            ENDIF
469         ENDDO
470      ENDDO
471
472      IF (lhook) CALL dr_hook(RoutineName,zhook_out,zhook_handle)
473   END SUBROUTINE phytoplankton
474
475#else
476   !!======================================================================
477   !!  Dummy module :                                   No MEDUSA bio-model
478   !!======================================================================
479CONTAINS
480   SUBROUTINE phytoplankton( )                    ! Empty routine
481   INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0
482   INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1
483   REAL(KIND=jprb)               :: zhook_handle
484
485   CHARACTER(LEN=*), PARAMETER :: RoutineName='PHYTOPLANKTON'
486
487   IF (lhook) CALL dr_hook(RoutineName,zhook_in,zhook_handle)
488
489      WRITE(*,*) 'phytoplankton: You should not have seen this print! error?'
490   IF (lhook) CALL dr_hook(RoutineName,zhook_out,zhook_handle)
491   END SUBROUTINE phytoplankton
492#endif 
493
494   !!======================================================================
495END MODULE phytoplankton_mod
Note: See TracBrowser for help on using the repository browser.