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_NEMO_MERGE_2011/NEMOGCM/NEMO/TOP_SRC/PISCES – NEMO

source: branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zprod.F90 @ 3124

Last change on this file since 3124 was 3124, checked in by cetlod, 12 years ago

dev_NEMO_MERGE_2011/NEMOGCM:minor modifications on the use of nittrc000 + style corrections

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