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.
p4zprod.F90 in branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES – NEMO

source: branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zprod.F90 @ 2823

Last change on this file since 2823 was 2823, checked in by cetlod, 13 years ago

Add new parameterisation in PISCES, see ticket #854

  • Property svn:keywords set to Id
File size: 22.2 KB
Line 
1MODULE p4zprod
2   !!======================================================================
3   !!                         ***  MODULE p4zprod  ***
4   !! TOP :   PISCES
5   !!======================================================================
6   !! History :   1.0  !  2004     (O. Aumont) Original code
7   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90
8   !!             3.4  !  2011-05  (O. Aumont, C. Ethe) New parameterization of light limitation
9   !!----------------------------------------------------------------------
10#if defined key_pisces
11   !!----------------------------------------------------------------------
12   !!   'key_pisces'                                       PISCES bio-model
13   !!----------------------------------------------------------------------
14   !!----------------------------------------------------------------------
15   !!   p4z_prod       :   Compute the growth Rate of the two phytoplanktons groups
16   !!   p4z_prod_init  :   Initialization of the parameters for growth
17   !!   p4z_prod_alloc :   Allocate variables for growth
18   !!----------------------------------------------------------------------
19   USE oce_trc         !  shared variables between ocean and passive tracers
20   USE trc             !  passive tracers common variables
21   USE sms_pisces      !  PISCES Source Minus Sink variables
22   USE p4zopt          !  optical model
23   USE p4zlim          !  Co-limitations of differents nutrients
24   USE prtctl_trc      !  print control for debugging
25   USE iom             !  I/O manager
26
27   IMPLICIT NONE
28   PRIVATE
29
30   PUBLIC   p4z_prod         ! called in p4zbio.F90
31   PUBLIC   p4z_prod_init    ! called in trcsms_pisces.F90
32   PUBLIC   p4z_prod_alloc
33
34   !! * Shared module variables
35   REAL(wp), PUBLIC ::  pislope   = 3.0_wp            !:
36   REAL(wp), PUBLIC ::  pislope2  = 3.0_wp            !:
37   REAL(wp), PUBLIC ::  excret    = 10.e-5_wp         !:
38   REAL(wp), PUBLIC ::  excret2   = 0.05_wp           !:
39   REAL(wp), PUBLIC ::  bresp     = 0.00333_wp        !:
40   REAL(wp), PUBLIC ::  chlcnm    = 0.033_wp          !:
41   REAL(wp), PUBLIC ::  chlcdm    = 0.05_wp           !:
42   REAL(wp), PUBLIC ::  chlcmin   = 0.00333_wp        !:
43   REAL(wp), PUBLIC ::  fecnm     = 10.E-6_wp         !:
44   REAL(wp), PUBLIC ::  fecdm     = 15.E-6_wp         !:
45   REAL(wp), PUBLIC ::  grosip    = 0.151_wp          !:
46
47   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prmax     !: optimal prduction = f(temperature)
48   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   quotan   !: proxy of N quota in Nanophyto
49   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   quotad   !: proxy of N quota in diatomee
50   
51   REAL(wp) :: r1_rday                !: 1 / rday
52   REAL(wp) :: r1_bresp               !: 1 / bresp
53   REAL(wp) :: texcret                !: 1 - excret
54   REAL(wp) :: texcret2               !: 1 - excret2       
55   REAL(wp) :: tpp                    !: Total primary production
56
57
58   !!* Substitution
59#  include "top_substitute.h90"
60   !!----------------------------------------------------------------------
61   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
62   !! $Id$
63   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
64   !!----------------------------------------------------------------------
65CONTAINS
66
67   SUBROUTINE p4z_prod( kt , jnt )
68      !!---------------------------------------------------------------------
69      !!                     ***  ROUTINE p4z_prod  ***
70      !!
71      !! ** Purpose :   Compute the phytoplankton production depending on
72      !!              light, temperature and nutrient availability
73      !!
74      !! ** Method  : - ???
75      !!---------------------------------------------------------------------
76      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released
77      USE wrk_nemo, ONLY:   zmixnano   => wrk_2d_1 , zmixdiat    => wrk_2d_2, zstrn => wrk_2d_3
78      USE wrk_nemo, ONLY:   zpislopead => wrk_3d_2 , zpislopead2 => wrk_3d_3
79      USE wrk_nemo, ONLY:   zprdia     => wrk_3d_4 , zprbio      => wrk_3d_5 
80      USE wrk_nemo, ONLY:   zprdch     => wrk_3d_6 , zprnch      => wrk_3d_7
81      USE wrk_nemo, ONLY:   zprorca    => wrk_3d_8 , zprorcad    => wrk_3d_9
82      USE wrk_nemo, ONLY:   zprofed    => wrk_3d_10, zprofen     => wrk_3d_11
83      USE wrk_nemo, ONLY:   zprochln   => wrk_3d_12, zprochld    => wrk_3d_13
84      USE wrk_nemo, ONLY:   zpronew    => wrk_3d_14, zpronewd    => wrk_3d_15
85      !
86      INTEGER, INTENT(in) :: kt, jnt
87      !
88      INTEGER  ::   ji, jj, jk
89      REAL(wp) ::   zsilfac, zfact, znanotot, zdiattot, zconctemp, zconctemp2
90      REAL(wp) ::   zratio, zmax, zsilim, ztn, zadap
91      REAL(wp) ::   zlim, zsilfac2, zsiborn, zprod, zetot2, zproreg, zproreg2
92      REAL(wp) ::   zmxltst, zmxlday
93      REAL(wp) ::   zpislopen  , zpislope2n
94      REAL(wp) ::   zrum, zcodel, zargu, zval
95      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zysopt 
96      REAL(wp) ::   zrfact2
97      CHARACTER (len=25) :: charout
98      !!---------------------------------------------------------------------
99
100      IF( wrk_in_use(2, 1,2,3)                             .OR.  &
101          wrk_in_use(3, 2,3,4,5,6,7,8,9,10,11,12,13,14,15)  ) THEN
102          CALL ctl_stop('p4z_prod: requested workspace arrays unavailable')   ;   RETURN
103      ENDIF
104   
105      ALLOCATE( zysopt(jpi,jpj,jpk) )
106
107      zprorca (:,:,:) = 0._wp
108      zprorcad(:,:,:) = 0._wp
109      zprofed (:,:,:) = 0._wp
110      zprofen (:,:,:) = 0._wp
111      zprochln(:,:,:) = 0._wp
112      zprochld(:,:,:) = 0._wp
113      zpronew (:,:,:) = 0._wp
114      zpronewd(:,:,:) = 0._wp
115      zprdia  (:,:,:) = 0._wp
116      zprbio  (:,:,:) = 0._wp
117      zprdch  (:,:,:) = 0._wp
118      zprnch  (:,:,:) = 0._wp
119      zysopt  (:,:,:) = 0._wp
120
121      ! Computation of the optimal production
122      prmax(:,:,:) = 0.6_wp * r1_rday * tgfunc(:,:,:) 
123      IF( lk_degrad ) THEN
124        prmax(:,:,:) = prmax(:,:,:) * facvol(:,:,:)
125      ENDIF
126
127      ! compute the day length depending on latitude and the day
128      zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp )
129      zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  )
130
131      ! day length in hours
132      zstrn(:,:) = 0.
133      DO jj = 1, jpj
134         DO ji = 1, jpi
135            zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad )
136            zargu = MAX( -1., MIN(  1., zargu ) )
137            zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. )
138         END DO
139      END DO
140
141     ! Impact of the day duration on phytoplankton growth
142      DO jk = 1, jpkm1
143         DO jj = 1 ,jpj
144            DO ji = 1, jpi
145               zval = MAX( 1., zstrn(ji,jj) )
146               zval = 1.5 * zval / ( 12. + zval )
147               zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zval
148               zprdia(ji,jj,jk) = zprbio(ji,jj,jk)
149            END DO
150         END DO
151      END DO
152
153      WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24.
154      zstrn(:,:) = 24. / zstrn(:,:)
155
156!CDIR NOVERRCHK
157      DO jk = 1, jpkm1
158!CDIR NOVERRCHK
159         DO jj = 1, jpj
160!CDIR NOVERRCHK
161            DO ji = 1, jpi
162
163               ! Computation of the P-I slope for nanos and diatoms
164               IF( etot(ji,jj,jk) > 1.E-3 ) THEN
165                   ztn    = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. )
166                   zadap  = ztn / ( 2.+ ztn )
167
168                   zconctemp   = MAX( 0.e0 , trn(ji,jj,jk,jpdia) - 5e-7 )
169                   zconctemp2  = trn(ji,jj,jk,jpdia) - zconctemp
170
171                   znanotot = enano(ji,jj,jk) * zstrn(ji,jj)
172                   zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj)
173                   zfact  = EXP( -0.21 * znanotot )
174
175                   zpislopead (ji,jj,jk) = pislope  * ( 1.+ zadap  * zfact )  &
176                   &                       * trn(ji,jj,jk,jpnch) /( trn(ji,jj,jk,jpphy) * 12. + rtrn)
177
178                   zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp)   &
179                     &                     / ( trn(ji,jj,jk,jpdia) + rtrn )   &
180                     &                     * trn(ji,jj,jk,jpdch) /( trn(ji,jj,jk,jpdia) * 12. + rtrn)
181
182                  !  Computation of production function for Chlorophyll
183                  !--------------------------------------------------
184                   zpislopen  = zpislopead (ji,jj,jk) / ( prmax(ji,jj,jk) * rday + rtrn )
185                   zpislope2n = zpislopead2(ji,jj,jk) / ( prmax(ji,jj,jk) * rday + rtrn )
186                   zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * znanotot ) )
187                   zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot ) )
188
189                   ! Computation of production function for Carbon
190                   !  ---------------------------------------------
191                   zpislopen  = zpislopead (ji,jj,jk) / ( ( r1_rday + r1_bresp / chlcnm ) * rday + rtrn)
192                   zpislope2n = zpislopead2(ji,jj,jk) / ( ( r1_rday + r1_bresp / chlcdm ) * rday + rtrn)
193                   zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen  * znanotot )  )
194                   zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot )  )
195               ENDIF
196            END DO
197         END DO
198      END DO
199
200      !  Computation of a proxy of the N/C ratio
201      !  ---------------------------------------
202!CDIR NOVERRCHK
203      DO jk = 1, jpkm1
204!CDIR NOVERRCHK
205         DO jj = 1, jpj
206!CDIR NOVERRCHK
207            DO ji = 1, jpi
208                zval = ( xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) ) * prmax(ji,jj,jk) / ( zprbio(ji,jj,jk) + rtrn )
209                quotan(ji,jj,jk) = MIN( 1., 0.5 + 0.5 * zval )
210                zval = ( xdiatnh4(ji,jj,jk) + xdiatno3(ji,jj,jk) ) * prmax(ji,jj,jk) / ( zprdia(ji,jj,jk) + rtrn )
211                quotad(ji,jj,jk) = MIN( 1., 0.5 + 0.5 * zval )
212            END DO
213         END DO
214      END DO
215
216
217      DO jk = 1, jpkm1
218         DO jj = 1, jpj
219            DO ji = 1, jpi
220
221                IF( etot(ji,jj,jk) > 1.E-3 ) THEN
222                   !    Si/C of diatoms
223                   !    ------------------------
224                   !    Si/C increases with iron stress and silicate availability
225                   !    Si/C is arbitrariliy increased for very high Si concentrations
226                   !    to mimic the very high ratios observed in the Southern Ocean (silpot2)
227                  zlim  = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi1 )
228                  zsilim = MIN( zprdia(ji,jj,jk) / ( prmax(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) )
229                  zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) )  ) + 1.e0
230                  zsiborn = MAX( 0.e0, ( trn(ji,jj,jk,jpsil) - 15.e-6 ) )
231                  zsilfac2 = 1.+ 2.* zsiborn / ( zsiborn + xksi2 )
232                  zsilfac = MIN( 5.4, zsilfac * zsilfac2)
233                  zysopt(ji,jj,jk) = grosip * zlim * zsilfac
234              ENDIF
235            END DO
236         END DO
237      END DO
238
239      !  Computation of the limitation term due to
240      !  A mixed layer deeper than the euphotic depth
241      DO jj = 1, jpj
242         DO ji = 1, jpi
243            zmxltst = MAX( 0.e0, hmld(ji,jj) - heup(ji,jj) )
244            zmxlday = zmxltst * zmxltst * r1_rday
245            zmixnano(ji,jj) = 1. - zmxlday / ( 3. + zmxlday )
246            zmixdiat(ji,jj) = 1. - zmxlday / ( 4. + zmxlday )
247         END DO
248      END DO
249 
250      !  Mixed-layer effect on production                                                                               
251      DO jk = 1, jpkm1
252         DO jj = 1, jpj
253            DO ji = 1, jpi
254               IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN
255                  zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * zmixnano(ji,jj)
256                  zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * zmixdiat(ji,jj)
257                  zprnch(ji,jj,jk) = zprnch(ji,jj,jk) * zmixnano(ji,jj)
258                  zprdch(ji,jj,jk) = zprdch(ji,jj,jk) * zmixdiat(ji,jj)
259               ENDIF
260            END DO
261         END DO
262      END DO
263
264!CDIR NOVERRCHK
265      DO jk = 1, jpkm1
266!CDIR NOVERRCHK
267         DO jj = 1, jpj
268!CDIR NOVERRCHK
269            DO ji = 1, jpi
270
271               IF( etot(ji,jj,jk) > 1.E-3 ) THEN
272                  !     Computation of the various production terms for nanophyto.
273                  zetot2 = enano(ji,jj,jk) * zstrn(ji,jj)
274                  zprorca(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trn(ji,jj,jk,jpphy) * rfact2
275                  zpronew(ji,jj,jk) = zprorca(ji,jj,jk) * xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn )
276                  !
277                  zprod = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * xlimphy(ji,jj,jk)
278                  zprochln(ji,jj,jk) = chlcmin * 12. * zprorca(ji,jj,jk)
279                  zprochln(ji,jj,jk) = zprochln(ji,jj,jk) + chlcnm * 12. * zprod / (  zpislopead(ji,jj,jk) * zetot2 +rtrn)
280                  !
281                  zratio = trn(ji,jj,jk,jpnfe) / ( trn(ji,jj,jk,jpphy) + rtrn )
282                  zratio = zratio / fecnm 
283                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 
284                  zprofen(ji,jj,jk) = fecnm * prmax(ji,jj,jk)  &
285                  &             * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) )    &
286                  &             * trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + concnfe(ji,jj,jk) )  &
287                  &             * zmax * trn(ji,jj,jk,jpphy) * rfact2
288               ENDIF
289            END DO
290         END DO
291      END DO
292
293!CDIR NOVERRCHK
294      DO jk = 1, jpkm1
295!CDIR NOVERRCHK
296         DO jj = 1, jpj
297!CDIR NOVERRCHK
298            DO ji = 1, jpi
299               IF( etot(ji,jj,jk) > 1.E-3 ) THEN
300                  !  Computation of the various production terms for diatoms
301                  zetot2 = ediat(ji,jj,jk) * zstrn(ji,jj)
302                  zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trn(ji,jj,jk,jpdia) * rfact2
303                  zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn )
304                  !
305                  zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * xlimdia(ji,jj,jk)
306                  zprochld(ji,jj,jk) = chlcmin * 12. * zprorcad(ji,jj,jk)
307                  zprochld(ji,jj,jk) = zprochld(ji,jj,jk) + chlcdm * 12. * zprod / ( zpislopead2(ji,jj,jk) * zetot2 +rtrn )
308                  !
309                  zratio = trn(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn )
310                  zratio = zratio / fecdm 
311                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 
312                  zprofed(ji,jj,jk) = fecdm * prmax(ji,jj,jk)  &
313                  &             * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) )    &
314                  &             * trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + concdfe(ji,jj,jk) )  &
315                  &             * zmax * trn(ji,jj,jk,jpdia) * rfact2
316               ENDIF
317            END DO
318         END DO
319      END DO
320
321      !   Update the arrays TRA which contain the biological sources and sinks
322      DO jk = 1, jpkm1
323         DO jj = 1, jpj
324           DO ji =1 ,jpi
325              zproreg  = zprorca(ji,jj,jk) - zpronew(ji,jj,jk)
326              zproreg2 = zprorcad(ji,jj,jk) - zpronewd(ji,jj,jk)
327              tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) - zprorca(ji,jj,jk) - zprorcad(ji,jj,jk)
328              tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - zpronew(ji,jj,jk) - zpronewd(ji,jj,jk)
329              tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zproreg - zproreg2
330              tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zprorca(ji,jj,jk) * texcret
331              tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) + zprochln(ji,jj,jk) * texcret
332              tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) + zprofen(ji,jj,jk) * texcret
333              tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) + zprorcad(ji,jj,jk) * texcret2
334              tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) + zprochld(ji,jj,jk) * texcret2
335              tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) + zprofed(ji,jj,jk) * texcret2
336              tra(ji,jj,jk,jpbsi) = tra(ji,jj,jk,jpbsi) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * texcret2
337              tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + excret2 * zprorcad(ji,jj,jk) + excret * zprorca(ji,jj,jk)
338              tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2ut * ( zproreg + zproreg2) &
339                 &                + ( o2ut + o2nit ) * ( zpronew(ji,jj,jk) + zpronewd(ji,jj,jk) )
340              tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - texcret * zprofen(ji,jj,jk) - texcret2 * zprofed(ji,jj,jk)
341              tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - texcret2 * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk)
342              tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprorca(ji,jj,jk) - zprorcad(ji,jj,jk)
343              tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zpronew(ji,jj,jk) + zpronewd(ji,jj,jk) ) &
344                 &                                      - rno3 * ( zproreg + zproreg2 )
345          END DO
346        END DO
347     END DO
348
349     ! Total primary production per year
350     IF( lk_degrad )  THEN
351        tpp = tpp + glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) * facvol(:,:,:) )
352     ELSE
353        tpp = tpp + glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) )
354     ENDIF
355
356     IF( kt == nitend .AND. jnt == nrdttrc .AND. lwp ) THEN
357        WRITE(numout,*) 'Total PP (Gtc) :'
358        WRITE(numout,*) '-------------------- : ',tpp * 12. / 1.E12
359        WRITE(numout,*) 
360      ENDIF
361
362#if defined key_diatrc 
363      zrfact2 = 1.e3 * rfact2r
364#if defined key_iomput
365      IF( jnt == nrdttrc ) THEN
366         CALL iom_put( "PPPHY" , zprorca (:,:,:) * zrfact2 * tmask(:,:,:) )  ! primary production by nanophyto
367         CALL iom_put( "PPPHY2", zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) )  ! primary production by diatom
368         CALL iom_put( "PPNEWN", zpronew (:,:,:) * zrfact2 * tmask(:,:,:) )  ! new primary production by nanophyto
369         CALL iom_put( "PPNEWD", zpronewd(:,:,:) * zrfact2 * tmask(:,:,:) )  ! new primary production by diatom
370         CALL iom_put( "PBSi"  , zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) * zysopt(:,:,:) ) ! biogenic silica production
371         CALL iom_put( "PFeD"  , zprofed (:,:,:) * zrfact2 * tmask(:,:,:) )  ! biogenic iron production by diatom
372         CALL iom_put( "PFeN"  , zprofen (:,:,:) * zrfact2 * tmask(:,:,:) )  ! biogenic iron production by nanophyto
373#else
374         trc3d(:,:,:,jp_pcs0_3d + 4)  = zprorca (:,:,:) * zrfact2 * tmask(:,:,:)
375         trc3d(:,:,:,jp_pcs0_3d + 5)  = zprorcad(:,:,:) * zrfact2 * tmask(:,:,:)
376         trc3d(:,:,:,jp_pcs0_3d + 6)  = zpronew (:,:,:) * zrfact2 * tmask(:,:,:)
377         trc3d(:,:,:,jp_pcs0_3d + 7)  = zpronewd(:,:,:) * zrfact2 * tmask(:,:,:)
378         trc3d(:,:,:,jp_pcs0_3d + 8)  = zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) * zysopt(:,:,:)
379         trc3d(:,:,:,jp_pcs0_3d + 9)  = zprofed (:,:,:) * zrfact2 * tmask(:,:,:)
380#  if ! defined key_kriest
381         trc3d(:,:,:,jp_pcs0_3d + 10) = zprofen (:,:,:) * zrfact2 * tmask(:,:,:)
382#  endif
383#endif
384#endif
385
386      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
387         WRITE(charout, FMT="('prod')")
388         CALL prt_ctl_trc_info(charout)
389         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
390      ENDIF
391
392      IF(  wrk_not_released(2, 1,2,3)                          .OR.  &
393           wrk_not_released(3, 2,3,4,5,6,7,8,9,10,11,12,13,14,15)   )   &
394           CALL ctl_stop('p4z_prod: failed to release workspace arrays')
395      !
396      DEALLOCATE( zysopt )
397      !
398   END SUBROUTINE p4z_prod
399
400
401   SUBROUTINE p4z_prod_init
402      !!----------------------------------------------------------------------
403      !!                  ***  ROUTINE p4z_prod_init  ***
404      !!
405      !! ** Purpose :   Initialization of phytoplankton production parameters
406      !!
407      !! ** Method  :   Read the nampisprod namelist and check the parameters
408      !!      called at the first timestep (nit000)
409      !!
410      !! ** input   :   Namelist nampisprod
411      !!----------------------------------------------------------------------
412      !
413      NAMELIST/nampisprod/ pislope, pislope2, bresp, excret, excret2,  &
414         &                 chlcnm, chlcdm, chlcmin, fecnm, fecdm, grosip
415      !!----------------------------------------------------------------------
416
417      REWIND( numnatp )                     ! read numnat
418      READ  ( numnatp, nampisprod )
419
420      IF(lwp) THEN                         ! control print
421         WRITE(numout,*) ' '
422         WRITE(numout,*) ' Namelist parameters for phytoplankton growth, nampisprod'
423         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
424         WRITE(numout,*) '    mean Si/C ratio                           grosip    =', grosip
425         WRITE(numout,*) '    P-I slope                                 pislope   =', pislope
426         WRITE(numout,*) '    excretion ratio of nanophytoplankton      excret    =', excret
427         WRITE(numout,*) '    excretion ratio of diatoms                excret2   =', excret2
428         WRITE(numout,*) '    basal respiration in phytoplankton        bresp     =', bresp
429         WRITE(numout,*) '    P-I slope  for diatoms                    pislope2  =', pislope2
430         WRITE(numout,*) '    Minimum Chl/C in nanophytoplankton        chlcnm    =', chlcnm
431         WRITE(numout,*) '    Minimum Chl/C in diatoms                  chlcdm    =', chlcdm
432         WRITE(numout,*) '    Maximum Chl/C in phytoplankton            chlcmin   =', chlcmin
433         WRITE(numout,*) '    Maximum Fe/C in nanophytoplankton         fecnm     =', fecnm
434         WRITE(numout,*) '    Minimum Fe/C in diatoms                   fecdm     =', fecdm
435      ENDIF
436      !
437      r1_rday   = 1._wp / rday 
438      r1_bresp  = bresp * r1_rday
439      texcret   = 1._wp - excret
440      texcret2  = 1._wp - excret2
441      tpp       = 0._wp
442      !
443   END SUBROUTINE p4z_prod_init
444
445
446   INTEGER FUNCTION p4z_prod_alloc()
447      !!----------------------------------------------------------------------
448      !!                     ***  ROUTINE p4z_prod_alloc  ***
449      !!----------------------------------------------------------------------
450      ALLOCATE( prmax(jpi,jpj,jpk), quotan(jpi,jpj,jpk), quotad(jpi,jpj,jpk), STAT = p4z_prod_alloc )
451      !
452      IF( p4z_prod_alloc /= 0 ) CALL ctl_warn('p4z_prod_alloc : failed to allocate arrays.')
453      !
454   END FUNCTION p4z_prod_alloc
455
456#else
457   !!======================================================================
458   !!  Dummy module :                                   No PISCES bio-model
459   !!======================================================================
460CONTAINS
461   SUBROUTINE p4z_prod                    ! Empty routine
462   END SUBROUTINE p4z_prod
463#endif 
464
465   !!======================================================================
466END MODULE  p4zprod
Note: See TracBrowser for help on using the repository browser.