source: branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zprod.F90 @ 775

Last change on this file since 775 was 775, checked in by gm, 13 years ago

dev_001_GM - PISCES in F90 : encapsulation of all p4z…F files in module F90 + doctor norme for local variables - compilation OK

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 10.1 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   !!----------------------------------------------------------------------
9#if defined key_pisces
10   !!----------------------------------------------------------------------
11   !!   'key_pisces'                                       PISCES bio-model
12   !!----------------------------------------------------------------------
13   !!   p4z_prod       : 
14   !!----------------------------------------------------------------------
15   USE oce_trc         !
16   USE trp_trc         !
17   USE sms             !
18   USE p4zday          !
19   
20   IMPLICIT NONE
21   PRIVATE
22
23   PUBLIC   p4z_prod    ! called in p4zbio.F90
24
25   !!* Substitution
26#  include "domzgr_substitute.h90"
27   !!----------------------------------------------------------------------
28   !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)
29   !! $Header:$
30   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
31   !!----------------------------------------------------------------------
32
33CONTAINS
34
35   SUBROUTINE p4z_prod
36      !!---------------------------------------------------------------------
37      !!                     ***  ROUTINE p4z_prod  ***
38      !!
39      !! ** Purpose :   Compute the phytoplankton production depending on
40      !!              light, temperature and nutrient availability
41      !!
42      !! ** Method  : - ???
43      !!---------------------------------------------------------------------
44      INTEGER  ::   ji, jj, jk
45      REAL(wp) ::   zsilfac, zfact
46      REAL(wp) ::   zprdiachl, zprbiochl, zsilim, ztn, zadap, zadap2
47      REAL(wp) ::   zlim, zsilfac2, zsiborn, zprod
48      REAL(wp) ::   zmxltst, zmxlday, zlim1
49      REAL(wp), DIMENSION(jpi,jpj)     ::   zmixnano , zmixdiat
50      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zpislopen, zpislope2n
51      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zsopt    , zpislopead
52      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zprdia   , zprbio
53      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zetot2   , zpislopead2
54      !!---------------------------------------------------------------------
55
56!     Computation of the optimal production
57!     -------------------------------------
58
59# if defined key_off_degrad
60      prmax(:,:,:) = 0.6 / rjjss * tgfunc(:,:,:) * facvol(:,:,:)
61# else
62      prmax(:,:,:) = 0.6 / rjjss * tgfunc(:,:,:)
63# endif
64
65      CALL p4z_day       ! Computation of the day length
66
67
68      DO jk = 1, jpkm1
69         DO jj = 1, jpj
70            DO ji = 1, jpi
71
72!      Computation of the P-I slope for nanos and diatoms
73!      --------------------------------------------------
74
75               ztn    = MAX( 0., tn(ji,jj,jk) - 15. )
76               zadap  = 1.+ 2.* ztn / ( 2.+ ztn )
77               zadap2 = 1.e0
78
79               zfact  = EXP( -0.21 * emoy(ji,jj,jk) )
80
81               zpislopead (ji,jj,jk) = pislope  * ( 1.+ zadap  * zfact )
82               zpislopead2(ji,jj,jk) = pislope2 * ( 1.+ zadap2 * zfact )
83
84               zpislopen(ji,jj,jk) = zpislopead(ji,jj,jk) * trn(ji,jj,jk,jpnch)               &
85                  &                / ( trn(ji,jj,jk,jpphy) * 12.                   + rtrn )   &
86                  &                / ( prmax(ji,jj,jk) * rjjss * xlimphy(ji,jj,jk) + rtrn )
87
88               zpislope2n(ji,jj,jk) = zpislopead2(ji,jj,jk) * trn(ji,jj,jk,jpdch)              &
89                  &                 / ( trn(ji,jj,jk,jpdia) * 12.                   + rtrn )   &
90                  &                 / ( prmax(ji,jj,jk) * rjjss * xlimdia(ji,jj,jk) + rtrn )
91
92            END DO
93         END DO
94      END DO
95
96      DO jk = 1, jpkm1
97         DO jj = 1, jpj
98            DO ji = 1, jpi
99
100!     Computation of production function
101!     ----------------------------------
102
103               zprbio(ji,jj,jk) = prmax(ji,jj,jk) * (  1.- EXP( -zpislopen (ji,jj,jk) * etot(ji,jj,jk) )  )
104               zprdia(ji,jj,jk) = prmax(ji,jj,jk) * (  1.- EXP( -zpislope2n(ji,jj,jk) * etot(ji,jj,jk) )  )
105
106            END DO
107         END DO
108      END DO
109
110      DO jk = 1, jpkm1
111         DO jj = 1, jpj
112            DO ji = 1, jpi
113
114!    Si/C of diatoms
115!    ------------------------
116!    Si/C increases with iron stress and silicate availability
117!    Si/C is arbitrariliy increased for very high Si concentrations
118!    to mimic the very high ratios observed in the Southern Ocean (silpot2)
119
120               zlim1  = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi1 )
121               zlim   = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk)
122
123               zsilim = MIN( zprdia(ji,jj,jk)    / ( rtrn + prmax(ji,jj,jk) ),                    &
124                  &          trn(ji,jj,jk,jpfer) / ( concdfe(ji,jj,jk) + trn(ji,jj,jk,jpfer) ),   &
125                  &          trn(ji,jj,jk,jppo4) / ( concdnh4 + trn(ji,jj,jk,jppo4) ),            &
126                  &          zlim )
127               zsilfac = 5.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim1 - 0.5 ) )  ) + 1.e0
128               zsiborn = MAX( 0.e0, ( trn(ji,jj,jk,jpsil) - 15.e-6 ) )
129               zsilfac2 = 1.+ 3.* zsiborn / ( zsiborn + xksi2 )
130               zsilfac = MIN( 6.4,zsilfac * zsilfac2)
131
132               zsopt(ji,jj,jk) = grosip * trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi1 ) * zsilfac
133
134            END DO
135         END DO
136      END DO
137
138!    Computation of the limitation term due to
139!    A mixed layer deeper than the euphotic depth
140!    --------------------------------------------
141
142      DO jj = 1, jpj
143         DO ji = 1, jpi
144            zmxltst = MAX( 0.e0, hmld(ji,jj) - zmeu(ji,jj) )
145            zmxlday = zmxltst**2 / rjjss
146            zmixnano(ji,jj) = 1.- zmxlday / ( 1.+ zmxlday )
147            zmixdiat(ji,jj) = 1.- zmxlday / ( 3.+ zmxlday )
148         END DO
149      END DO
150                                                                               
151      DO jk = 1, jpkm1
152         DO jj = 1, jpj
153            DO ji = 1, jpi
154               IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN
155
156!     Mixed-layer effect on production
157!     --------------------------------
158                  zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * zmixnano(ji,jj)
159                  zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * zmixdiat(ji,jj)
160               ENDIF
161            END DO
162         END DO
163      END DO
164
165      DO jk = 1, jpkm1
166         DO jj = 1, jpj
167            DO ji = 1, jpi
168
169!      Computation of the maximum light intensity
170!      ------------------------------------------
171               zetot2(ji,jj,jk) = etot(ji,jj,jk) * 24. / ( strn(ji,jj) + rtrn )
172               IF( strn(ji,jj) < 1.e0 )   zetot2(ji,jj,jk) = etot(ji,jj,jk)
173
174            END DO
175         END DO
176      END DO
177
178      DO jk = 1, jpkm1
179         DO jj = 1, jpj
180            DO ji = 1, jpi
181
182!     Computation of the various production terms for nanophyto.
183!     ----------------------------------------------------------
184               zpislopen(ji,jj,jk) = zpislopead(ji,jj,jk)          &
185                  &                * trn(ji,jj,jk,jpnch) / ( rtrn + trn(ji,jj,jk,jpphy) * 12.)         &
186                  &                / ( prmax(ji,jj,jk) * rjjss * MAX( 0.1, xlimphy(ji,jj,jk) ) + rtrn )
187
188               zprbiochl = prmax(ji,jj,jk) * (  1.- EXP( -zpislopen(ji,jj,jk) * zetot2(ji,jj,jk) )  )
189
190               prorca(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trn(ji,jj,jk,jpphy) * rfact2
191
192               pronew(ji,jj,jk) = prorca(ji,jj,jk) * xnanono3(ji,jj,jk)    &
193                  &             / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn )
194               proreg(ji,jj,jk) = prorca(ji,jj,jk) - pronew(ji,jj,jk)
195
196               zprod = rjjss * prorca(ji,jj,jk) * zprbiochl * trn(ji,jj,jk,jpphy)   &
197                  &                             * MAX( 0.1, xlimphy(ji,jj,jk) )
198
199               prorca5(ji,jj,jk) = (fecnm)**2 * zprod / chlcnm            &
200                  &              / (  zpislopead(ji,jj,jk) * zetot2(ji,jj,jk) * trn(ji,jj,jk,jpnfe) + rtrn  )
201
202               prorca6(ji,jj,jk) = chlcnm * 144. * zprod                  &
203                  &              / (  zpislopead(ji,jj,jk) * zetot2(ji,jj,jk) * trn(ji,jj,jk,jpnch) + rtrn  )
204
205            END DO
206         END DO
207      END DO
208
209      DO jk = 1, jpkm1
210         DO jj = 1, jpj
211            DO ji = 1, jpi
212
213!       Computation of the various production terms for diatoms
214!       -------------------------------------------------------
215               zpislope2n(ji,jj,jk) = zpislopead2(ji,jj,jk) * trn(ji,jj,jk,jpdch)        &
216                  &                 / ( rtrn + trn(ji,jj,jk,jpdia) * 12.)        &
217                  &                 / ( prmax(ji,jj,jk) * rjjss * MAX( 0.1, xlimdia(ji,jj,jk) ) + rtrn )
218
219               zprdiachl = prmax(ji,jj,jk) * (  1.- EXP( -zetot2(ji,jj,jk) * zpislope2n(ji,jj,jk) )  )
220
221               prorca2(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trn(ji,jj,jk,jpdia) * rfact2
222
223               pronew2(ji,jj,jk) = prorca2(ji,jj,jk) * xdiatno3(ji,jj,jk)     &
224                  &              / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn )
225               proreg2(ji,jj,jk) = prorca2(ji,jj,jk) - pronew2(ji,jj,jk)
226               prorca3(ji,jj,jk) = prorca2(ji,jj,jk) * zsopt(ji,jj,jk)
227
228               zprod=rjjss * prorca2(ji,jj,jk) * zprdiachl * trn(ji,jj,jk,jpdia) * MAX( 0.1, xlimdia(ji,jj,jk) )
229
230               prorca4(ji,jj,jk) = (fecdm)**2 * zprod / chlcdm                   &
231                  &              / ( zpislopead2(ji,jj,jk) * zetot2(ji,jj,jk) * trn(ji,jj,jk,jpdfe) + rtrn )
232
233               prorca7(ji,jj,jk) = chlcdm * 144. * zprod       &
234                  &              / ( zpislopead2(ji,jj,jk) * zetot2(ji,jj,jk) * trn(ji,jj,jk,jpdch) + rtrn )
235
236            END DO
237         END DO
238      END DO
239      !
240   END SUBROUTINE p4z_prod
241
242#else
243   !!======================================================================
244   !!  Dummy module :                                   No PISCES bio-model
245   !!======================================================================
246CONTAINS
247   SUBROUTINE p4z_prod                    ! Empty routine
248   END SUBROUTINE p4z_prod
249#endif 
250
251   !!======================================================================
252END MODULE  p4zprod
Note: See TracBrowser for help on using the repository browser.