source: branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zmeso.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: 9.3 KB
Line 
1MODULE p4zmeso
2   !!======================================================================
3   !!                         ***  MODULE p4zmeso  ***
4   !! TOP :   PISCES Compute the sources/sinks for mesozooplankton
5   !!======================================================================
6   !! History :   1.0  !  2002     (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_meso       :   Compute the sources/sinks for mesozooplankton
14   !!----------------------------------------------------------------------
15   USE oce_trc         !
16   USE trp_trc         !
17   USE sms             !
18
19   IMPLICIT NONE
20   PRIVATE
21
22   PUBLIC   p4z_meso    ! called in p4zbio.F90
23
24   !!* Substitution
25#  include "domzgr_substitute.h90"
26   !!----------------------------------------------------------------------
27   !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)
28   !! $Header:$
29   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
30   !!----------------------------------------------------------------------
31
32CONTAINS
33
34   SUBROUTINE p4z_meso
35      !!---------------------------------------------------------------------
36      !!                     ***  ROUTINE p4z_meso  ***
37      !!
38      !! ** Purpose :   Compute the sources/sinks for mesozooplankton
39      !!
40      !! ** Method  : - ???
41      !!---------------------------------------------------------------------
42      INTEGER  ::   ji, jj, jk
43      REAL(wp) ::   zcompadi, zcompaph, zcompapoc, zcompaz
44      REAL(wp) ::   zfact, zstep, zcompam, zdenom, zgraze2
45      !!---------------------------------------------------------------------
46
47      zstep = rfact2 / rjjss      ! Time step duration for biology
48
49      DO jk = 1, jpkm1
50         DO jj = 1, jpj
51            DO ji = 1, jpi
52
53               zcompam = MAX( ( trn(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 )
54# if defined key_off_degrad
55               zfact   = zstep * tgfunc(ji,jj,jk) * zcompam * facvol(ji,jj,jk)
56# else
57               zfact   = zstep * tgfunc(ji,jj,jk) * zcompam
58# endif
59
60!     Respiration rates of both zooplankton
61!     -------------------------------------
62               respz2(ji,jj,jk) = resrat2 * zfact * ( 1. + 3. * nitrfac(ji,jj,jk) )        &
63                  &             * trn(ji,jj,jk,jpmes) / ( xkmort + trn(ji,jj,jk,jpmes) )
64
65!     Zooplankton mortality. A square function has been selected with
66!     no real reason except that it seems to be more stable and may
67!     mimic predation.
68!     ---------------------------------------------------------------
69               tortz2(ji,jj,jk) = mzrat2 * 1.e6 * zfact * trn(ji,jj,jk,jpmes)
70               !
71            END DO
72         END DO
73      END DO
74
75      DO jk = 1, jpkm1
76         DO jj = 1, jpj
77            DO ji = 1, jpi
78
79               zcompadi  = MAX( ( trn(ji,jj,jk,jpdia) - 1.e-8 ), 0.e0 )
80               zcompaz   = MAX( ( trn(ji,jj,jk,jpzoo) - 1.e-8 ), 0.e0 )
81               zcompaph  = MAX( ( trn(ji,jj,jk,jpphy) - 2.e-7 ), 0.e0 )
82               zcompapoc = MAX( ( trn(ji,jj,jk,jppoc) - 1.e-8 ), 0.e0 )
83
84!     Microzooplankton grazing
85!     ------------------------
86               zdenom = 1. / (  xkgraz2 + xprefc   * trn(ji,jj,jk,jpdia)   &
87                  &                     + xprefz   * trn(ji,jj,jk,jpzoo)   &
88                  &                     + xprefp   * trn(ji,jj,jk,jpphy)   &
89                  &                     + xprefpoc * trn(ji,jj,jk,jppoc)  )
90
91               zgraze2 = grazrat2 * zstep * Tgfunc2(ji,jj,jk) * zdenom    &
92# if defined key_off_degrad
93                  &     * facvol(ji,jj,jk)          &
94# endif
95                  &     * trn(ji,jj,jk,jpmes)
96
97               grazd  (ji,jj,jk) = zgraze2 * xprefc   * zcompadi
98               grazz  (ji,jj,jk) = zgraze2 * xprefz   * zcompaz
99               grazn  (ji,jj,jk) = zgraze2 * xprefp   * zcompaph
100               grazpoc(ji,jj,jk) = zgraze2 * xprefpoc * zcompapoc
101
102               graznf (ji,jj,jk) = grazn  (ji,jj,jk) * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn)
103
104               graznch(ji,jj,jk) = grazn  (ji,jj,jk) * trn(ji,jj,jk,jpnch) / (trn(ji,jj,jk,jpphy) + rtrn)
105
106               grazs  (ji,jj,jk) = grazd  (ji,jj,jk) * trn(ji,jj,jk,jpbsi) / (trn(ji,jj,jk,jpdia) + rtrn)
107
108               grazf  (ji,jj,jk) = grazd  (ji,jj,jk) * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn)
109
110               grazdch(ji,jj,jk) = grazd  (ji,jj,jk) * trn(ji,jj,jk,jpdch) / (trn(ji,jj,jk,jpdia) + rtrn)
111
112               grazpof(ji,jj,jk) = grazpoc(ji,jj,jk) * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)
113            END DO
114         END DO
115      END DO
116
117      DO jk = 1, jpkm1
118         DO jj = 1, jpj
119            DO ji = 1, jpi
120
121!    Mesozooplankton flux feeding on GOC
122!    ----------------------------------
123# if ! defined key_kriest
124               grazffe(ji,jj,jk) = 5.e3 * zstep * wsbio4(ji,jj,jk)          &
125#  if defined key_off_degrad
126                  &     * facvol(ji,jj,jk)          &
127#  endif
128                  &     * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes)
129
130               grazfff(ji,jj,jk) = grazffe(ji,jj,jk)         &
131                  &     * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn)
132# else
133! KRIEST3
134               grazffe(ji,jj,jk) = 0.5 * 1.3e-2 / 5.5e-7 * 0.3 * zstep * wsbio3(ji,jj,jk)     &
135                  &     * tgfunc(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes)    &
136#  if defined key_off_degrad
137                  &     * facvol(ji,jj,jk)          &
138#  endif
139                  &     /  (trn(ji,jj,jk,jppoc) * 1.e7 + 0.1)
140
141!!C        grazffe(ji,jj,jk) = 5.e3 * zstep * wsbio3(ji,jj,jk)
142!!C     &     * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes)
143!!C#    if defined key_off_degrad
144!!C     &     * facvol(ji,jj,jk)
145!!C#    endif
146
147               grazfff(ji,jj,jk) = grazffe(ji,jj,jk)       &
148                  &     * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)
149# endif
150            END DO
151         END DO
152      END DO
153
154      DO jk = 1, jpkm1
155         DO jj = 1, jpj
156            DO ji = 1, jpi
157
158!    Mesozooplankton efficiency
159!    --------------------------
160               grarem2(ji,jj,jk) = (grazd(ji,jj,jk) + grazz(ji,jj,jk)              &
161                  &     + grazn(ji,jj,jk) + grazpoc(ji,jj,jk) + grazffe(ji,jj,jk))   &
162                  &     * (1.-epsher2-unass2)
163#if ! defined key_kriest
164               grafer2(ji,jj,jk) = (grazf(ji,jj,jk) + graznf(ji,jj,jk)                       &
165                  &     + grazz(ji,jj,jk) * ferat3 + grazpof(ji,jj,jk)                       &
166                  &     + grazfff(ji,jj,jk)) * (1.-epsher2-unass2)                       &
167                  &     + epsher2 * (grazd(ji,jj,jk) * MAX(                       &
168                  &    (trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn)                       &
169                  &    -ferat3),0.) + grazn(ji,jj,jk) * MAX(                       &
170                  &    (trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn)                       &
171                  &    -ferat3),0.) + grazpoc(ji,jj,jk) * MAX(                       &
172                  &    (trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)                       &
173                  &    -ferat3),0.) + grazffe(ji,jj,jk) * MAX(                       &
174                  &    (trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn)                       &
175                  &    -ferat3),0.) )
176#else
177               grafer2(ji,jj,jk) = (grazf(ji,jj,jk) + graznf(ji,jj,jk)                       &
178                  &     + grazz(ji,jj,jk) * ferat3 + grazpof(ji,jj,jk)                       &
179                  &     + grazfff(ji,jj,jk)) * (1.-epsher2-unass2)                       &
180                  &     + epsher2 * (grazd(ji,jj,jk) * MAX(                       &
181                  &    (trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn)                       &
182                  &    -ferat3),0.) + grazn(ji,jj,jk) * MAX(                       &
183                  &    (trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn)                       &
184                  &    -ferat3),0.) + grazpoc(ji,jj,jk) * MAX(                       &
185                  &    (trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)                       &
186                  &    -ferat3),0.) + grazffe(ji,jj,jk) * MAX(                       &
187                  &    (trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)                       &
188                  &    -ferat3),0.) )
189#endif
190               grapoc2(ji,jj,jk) = (grazd(ji,jj,jk) + grazz(ji,jj,jk)                     &
191                  &     + grazn(ji,jj,jk) + grazpoc(ji,jj,jk) + grazffe(ji,jj,jk)) * unass2
192               !
193            END DO
194         END DO
195      END DO
196      !
197   END SUBROUTINE p4z_meso
198
199#else
200   !!======================================================================
201   !!  Dummy module :                                   No PISCES bio-model
202   !!======================================================================
203CONTAINS
204   SUBROUTINE p4z_meso                    ! Empty routine
205   END SUBROUTINE p4z_meso
206#endif 
207
208   !!======================================================================
209END MODULE  p4zmeso
Note: See TracBrowser for help on using the repository browser.