source: branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zmicro.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: 6.6 KB
Line 
1MODULE p4zmicro
2   !!======================================================================
3   !!                         ***  MODULE p4zmicro  ***
4   !! TOP :   PISCES Compute the sources/sinks for microzooplankton
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_micro       :   Compute the sources/sinks for microzooplankton
14   !!----------------------------------------------------------------------
15   USE oce_trc         !
16   USE trp_trc         !
17   USE sms             !
18
19   IMPLICIT NONE
20   PRIVATE
21
22   PUBLIC   p4z_micro    ! 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_micro
35      !!---------------------------------------------------------------------
36      !!                     ***  ROUTINE p4z_micro  ***
37      !!
38      !! ** Purpose :   Compute the sources/sinks for microzooplankton
39      !!
40      !! ** Method  : - ???
41      !!---------------------------------------------------------------------
42      INTEGER  ::   ji, jj, jk
43      REAL(wp) ::   zcompadi, zcompadi2, zcompaz , zcompaph, zcompapoc
44      REAL(wp) ::   zgraze  , zdenom  , zdenom2
45      REAL(wp) ::   zfact   , zstep   , zinano , zidiat, zipoc
46      !!---------------------------------------------------------------------
47
48        zstep = rfact2 / rjjss      ! Time step duration for biology
49
50      DO jk = 1, jpkm1
51         DO jj = 1, jpj
52            DO ji = 1, jpi
53
54               zcompaz = MAX( ( trn(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 )
55# if defined key_off_degrad
56               zfact   = zstep * tgfunc(ji,jj,jk) * zcompaz *facvol(ji,jj,jk)
57# else
58               zfact   = zstep * tgfunc(ji,jj,jk) * zcompaz
59# endif
60
61!     Respiration rates of both zooplankton
62!     -------------------------------------
63
64               respz(ji,jj,jk) = resrat * zfact  * ( 1.+ 3.* nitrfac(ji,jj,jk) )     &
65                  &            * trn(ji,jj,jk,jpzoo) / ( xkmort + trn(ji,jj,jk,jpzoo) )
66
67!     Zooplankton mortality. A square function has been selected with
68!     no real reason except that it seems to be more stable and may
69!     mimic predation.
70!     ---------------------------------------------------------------
71
72               tortz(ji,jj,jk) = mzrat * 1.e6 * zfact * trn(ji,jj,jk,jpzoo)
73
74            END DO
75         END DO
76      END DO
77
78      DO jk = 1, jpkm1
79         DO jj = 1, jpj
80            DO ji = 1, jpi
81
82               zcompadi  = MAX( ( trn(ji,jj,jk,jpdia) - 1.e-8 ), 0.e0 )
83               zcompadi2 = MIN( zcompadi, 5.e-7 )
84               zcompaph  = MAX( ( trn(ji,jj,jk,jpphy) - 2.e-7 ), 0.e0 )
85               zcompapoc = MAX( ( trn(ji,jj,jk,jppoc) - 1.e-8 ), 0.e0 )
86
87!     Microzooplankton grazing
88!     ------------------------
89               zdenom2 = 1./ ( zprefp * zcompaph + zprefc * zcompapoc + zprefd * zcompadi2 + rtrn )
90
91               zgraze = grazrat * zstep * tgfunc(ji,jj,jk)     &
92# if defined key_off_degrad
93                  &      * facvol(ji,jj,jk)         &
94# endif
95                  &      * trn(ji,jj,jk,jpzoo)
96
97               zinano = zprefp * zcompaph  * zdenom2
98               zipoc  = zprefc * zcompapoc * zdenom2
99               zidiat = zprefd * zcompadi2 * zdenom2
100
101               zdenom = 1./ ( xkgraz + zinano * zcompaph + zipoc * zcompapoc + zidiat * zcompadi2 )
102
103               grazp (ji,jj,jk) = zgraze * zinano * zcompaph * zdenom
104               grazm (ji,jj,jk) = zgraze * zipoc  * zcompapoc * zdenom
105               grazsd(ji,jj,jk) = zgraze * zidiat * zcompadi2 * zdenom
106
107               grazpf (ji,jj,jk) = grazp (ji,jj,jk) * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn)
108
109               grazpch(ji,jj,jk) = grazp (ji,jj,jk) * trn(ji,jj,jk,jpnch) / (trn(ji,jj,jk,jpphy) + rtrn)
110
111               grazmf (ji,jj,jk) = grazm (ji,jj,jk) * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)
112
113               grazsf (ji,jj,jk) = grazsd(ji,jj,jk) * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn)
114
115               grazss (ji,jj,jk) = grazsd(ji,jj,jk) * trn(ji,jj,jk,jpbsi) / (trn(ji,jj,jk,jpdia) + rtrn)
116
117               grazsch(ji,jj,jk) = grazsd(ji,jj,jk) * trn(ji,jj,jk,jpdch) / (trn(ji,jj,jk,jpdia) + rtrn)
118
119            END DO
120         END DO
121      END DO
122
123      DO jk = 1, jpkm1
124         DO jj = 1, jpj
125            DO ji = 1, jpi
126
127!    Various remineralization and excretion terms
128!    --------------------------------------------
129
130               grarem(ji,jj,jk) = (  grazp(ji,jj,jk) + grazm (ji,jj,jk)        &
131                  &                                  + grazsd(ji,jj,jk)  ) * ( 1.- epsher - unass )
132
133               grafer(ji,jj,jk) = (  grazpf(ji,jj,jk) + grazsf(ji,jj,jk)      &
134                  &                                   + grazmf(ji,jj,jk)  ) * ( 1.- epsher - unass )   &
135                  &             + (  grazm (ji,jj,jk) * MAX( (trn(ji,jj,jk,jpsfe) /     &
136                  &                                          (trn(ji,jj,jk,jppoc) + rtrn) - ferat3), 0.e0 )   &
137                  &                + grazp (ji,jj,jk) * MAX( (trn(ji,jj,jk,jpnfe) /   &
138                  &                                          (trn(ji,jj,jk,jpphy) + rtrn) - ferat3), 0.e0 )   &
139                  &                + grazsd(ji,jj,jk) * MAX( (trn(ji,jj,jk,jpdfe) /   &
140                  &                                         (trn(ji,jj,jk,jpdia) + rtrn) - ferat3), 0.e0 )  ) * epsher 
141
142               grapoc(ji,jj,jk) = (  grazp(ji,jj,jk) + grazm(ji,jj,jk) + grazsd(ji,jj,jk)  ) * unass
143
144            END DO
145         END DO
146      END DO
147      !
148   END SUBROUTINE p4z_micro
149
150#else
151   !!======================================================================
152   !!  Dummy module :                                   No PISCES bio-model
153   !!======================================================================
154CONTAINS
155   SUBROUTINE p4z_micro                    ! Empty routine
156   END SUBROUTINE p4z_micro
157#endif 
158
159   !!======================================================================
160END MODULE  p4zmicro
Note: See TracBrowser for help on using the repository browser.