source: branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zrem.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.9 KB
Line 
1MODULE p4zrem
2   !!======================================================================
3   !!                         ***  MODULE p4zrem  ***
4   !! TOP :   PISCES Compute remineralization/scavenging of organic compounds
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_top'       and                                      TOP models
12   !!   'key_pisces'                                       PISCES bio-model
13   !!----------------------------------------------------------------------
14   !!   p4z_rem       :   Compute remineralization/scavenging of organic compounds
15   !!----------------------------------------------------------------------
16   USE oce_trc         !
17   USE trp_trc         !
18   USE sms             !
19
20   IMPLICIT NONE
21   PRIVATE
22
23   PUBLIC   p4z_rem    ! 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_rem
36      !!---------------------------------------------------------------------
37      !!                     ***  ROUTINE p4z_rem  ***
38      !!
39      !! ** Purpose :   Compute remineralization/scavenging of organic compounds
40      !!
41      !! ** Method  : - ???
42      !!---------------------------------------------------------------------
43      INTEGER  ::   ji, jj, jk
44      REAL(wp) ::   zremip, zremik , zlam1b
45      REAL(wp) ::   zkeq  , zfeequi, zsiremin
46      REAL(wp) ::   zsatur, zsatur2, znusil
47      REAL(wp) ::   zlamfac, zstep
48      REAL(wp), DIMENSION(jpi,jpj)     ::   ztempbac
49      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zdepbac, zfesatur
50      !!---------------------------------------------------------------------
51
52       zstep = rfact2 / rjjss      ! Time step duration for the biology
53
54
55!      Computation of the mean phytoplankton concentration as
56!      a crude estimate of the bacterial biomass
57!      --------------------------------------------------
58
59      DO jk = 1, jpkm1
60         DO jj = 1, jpj
61            DO ji = 1, jpi
62               IF( fsdept(ji,jj,jk) < 120. ) THEN
63                  zdepbac(ji,jj,jk) = MIN( 0.7 * ( trn(ji,jj,jk,jpzoo) + 2.* trn(ji,jj,jk,jpmes) ), 4.e-6 )
64                  ztempbac(ji,jj)   = zdepbac(ji,jj,jk)
65               ELSE
66                  zdepbac(ji,jj,jk) = MIN( 1., 120./ fsdept(ji,jj,jk) ) * ztempbac(ji,jj)
67               ENDIF
68            END DO
69         END DO
70      END DO
71
72      DO jk = 1, jpkm1
73         DO jj = 1, jpj
74            DO ji = 1, jpi
75
76!    DENITRIFICATION FACTOR COMPUTED FROM O2 LEVELS
77!    ----------------------------------------------
78
79               nitrfac(ji,jj,jk) = MAX(  0.e0, 0.4 * ( 6.e-6  - trn(ji,jj,jk,jpoxy) )    &
80                  &                                / ( oxymin + trn(ji,jj,jk,jpoxy) )  )
81            END DO
82         END DO
83      END DO
84
85      nitrfac(:,:,:) = MIN( 1., nitrfac(:,:,:) )
86
87      DO jk = 1, jpkm1
88         DO jj = 1, jpj
89            DO ji = 1, jpi
90
91!     DOC ammonification. Depends on depth, phytoplankton biomass
92!     and a limitation term which is supposed to be a parameterization
93!     of the bacterial activity.
94!     ----------------------------------------------------------------
95               zremik = xremik * zstep / 1.e-6 * xlimbac(ji,jj,jk)         &
96# if defined key_off_degrad
97                  &            * facvol(ji,jj,jk)              &
98# endif
99                  &            * zdepbac(ji,jj,jk)
100               zremik = MAX( zremik, 5.5e-4 * zstep )
101
102!     Ammonification in oxic waters with oxygen consumption
103!     -----------------------------------------------------
104               olimi(ji,jj,jk) = MIN(  ( trn(ji,jj,jk,jpoxy) - rtrn ) / o2ut,                     &
105                  &                    zremik * ( 1.- nitrfac(ji,jj,jk) ) * trn(ji,jj,jk,jpdoc)  ) 
106
107!     Ammonification in suboxic waters with denitrification
108!     -------------------------------------------------------
109               denitr(ji,jj,jk) = MIN(  ( trn(ji,jj,jk,jpno3) - rtrn ) / rdenit,           &
110                  &                     zremik * nitrfac(ji,jj,jk) * trn(ji,jj,jk,jpdoc)  )
111            END DO
112         END DO
113      END DO
114
115      olimi (:,:,:) = MAX( 0.e0, olimi (:,:,:) )
116      denitr(:,:,:) = MAX( 0.e0, denitr(:,:,:) )
117
118      DO jk = 1, jpkm1
119         DO jj = 1, jpj
120            DO ji = 1, jpi
121
122!    NH4 nitrification to NO3. Ceased for oxygen concentrations
123!    below 2 umol/L. Inhibited at strong light
124!    ----------------------------------------------------------
125               onitr(ji,jj,jk) = nitrif * zstep * trn(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) )     &
126# if defined key_off_degrad
127                  &            * facvol(ji,jj,jk)              &
128# endif
129                  &            * ( 1.- nitrfac(ji,jj,jk) )
130            END DO
131         END DO
132      END DO
133
134      DO jk = 1, jpkm1
135         DO jj = 1, jpj
136            DO ji = 1, jpi
137
138!    Bacterial uptake of iron. No iron is available in DOC. So
139!    Bacteries are obliged to take up iron from the water. Some
140!    studies (especially at Papa) have shown this uptake to be
141!    significant
142!    ----------------------------------------------------------
143               xbactfer(ji,jj,jk) = 15.e-6 * rfact2 * 4.* 0.4 * prmax(ji,jj,jk)           &
144                  &               * ( xlimphy(ji,jj,jk) * zdepbac(ji,jj,jk))**2           &
145                  &                  / ( xkgraz2 + zdepbac(ji,jj,jk) )                    &
146                  &                  * ( 0.5 + SIGN( 0.5, trn(ji,jj,jk,jpfer) -2.e-11 )  )
147
148            END DO
149         END DO
150      END DO
151
152      DO jk = 1, jpkm1
153         DO jj = 1, jpj
154            DO ji = 1, jpi
155
156!    POC disaggregation by turbulence and bacterial activity.
157!    -------------------------------------------------------------
158               zremip = xremip * zstep * tgfunc(ji,jj,jk)   &
159# if defined key_off_degrad
160                  &            * facvol(ji,jj,jk)              &
161# endif
162                  &            * ( 1.- 0.5 * nitrfac(ji,jj,jk) )
163
164!    POC disaggregation rate is reduced in anoxic zone as shown by
165!    sediment traps data. In oxic area, the exponent of the martin s
166!    law is around -0.87. In anoxic zone, it is around -0.35. This
167!    means a disaggregation constant about 0.5 the value in oxic zones
168!    -----------------------------------------------------------------
169               orem (ji,jj,jk) = zremip * trn(ji,jj,jk,jppoc)
170               ofer (ji,jj,jk) = zremip * trn(ji,jj,jk,jpsfe)
171#if ! defined key_kriest
172               orem2(ji,jj,jk) = zremip * trn(ji,jj,jk,jpgoc)
173               ofer2(ji,jj,jk) = zremip * trn(ji,jj,jk,jpbfe)
174#else
175               orem2(ji,jj,jk) = zremip * trn(ji,jj,jk,jpnum)
176#endif
177            END DO
178         END DO
179      END DO
180
181      DO jk = 1, jpkm1
182         DO jj = 1, jpj
183            DO ji = 1, jpi
184
185!     Remineralization rate of BSi depedant on T and saturation
186!     ---------------------------------------------------------
187               zsatur  = ( sio3eq(ji,jj,jk) - trn(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn )
188               zsatur  = MAX( rtrn, zsatur )
189               zsatur2 = zsatur * ( 1. + tn(ji,jj,jk) / 400.)**4
190               znusil  = 0.225  * ( 1. + tn(ji,jj,jk) / 15.) * zsatur + 0.775 * zsatur2**9
191#    if defined key_off_degrad
192               zsiremin = xsirem * zstep * znusil * facvol(ji,jj,jk)
193# else
194               zsiremin = xsirem * zstep * znusil
195#    endif
196               osil(ji,jj,jk) = zsiremin * trn(ji,jj,jk,jpdsi)
197               !
198            END DO
199         END DO
200      END DO
201
202      zfesatur(:,:,:) = 0.6e-9
203
204      DO jk = 1, jpkm1
205         DO jj = 1, jpj
206            DO ji = 1, jpi
207
208!     scavenging rate of iron. this scavenging rate depends on the
209!     load in particles on which they are adsorbed. The
210!     parameterization has been taken from studies on Th
211!     ------------------------------------------------------------
212               zkeq = fekeq(ji,jj,jk)
213               zfeequi = ( -( 1. + zfesatur(ji,jj,jk) * zkeq - zkeq * trn(ji,jj,jk,jpfer) )               &
214                  &        + SQRT( ( 1. + zfesatur(ji,jj,jk) * zkeq - zkeq * trn(ji,jj,jk,jpfer) )**2       &
215                  &               + 4. * trn(ji,jj,jk,jpfer) * zkeq) ) / ( 2. * zkeq )
216#if ! defined key_kriest
217               zlam1b = 3.e-5 + xlam1 * (  trn(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpgoc)   &
218                  &                      + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpdsi)  ) * 1.e6
219#else
220               zlam1b = 3.e-5 + xlam1 * (  trn(ji,jj,jk,jppoc)                   &
221                  &                      + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpdsi)  ) * 1.e6
222#endif
223# if defined key_off_degrad
224               xscave(ji,jj,jk) = zfeequi * zlam1b * zstep  * facvol(ji,jj,jk)
225# else
226               xscave(ji,jj,jk) = zfeequi * zlam1b * zstep
227# endif
228
229!  Increased scavenging for very high iron concentrations
230!  found near the coasts due to increased lithogenic particles
231!  and let s say it unknown processes (precipitation, ...)
232!  -----------------------------------------------------------
233               zlamfac = MAX( 0.e0, ( gphit(ji,jj) + 55.) / 30. )
234               zlamfac = MIN( 1.  , zlamfac )
235#if ! defined key_kriest
236               zlam1b = (  80.* ( trn(ji,jj,jk,jpdoc) + 35.e-6 )                           &
237                  &     + 698.*   trn(ji,jj,jk,jppoc) + 1.05e4 * trn(ji,jj,jk,jpgoc)  )                    &
238                  &   * zdiss(ji,jj,jk) + 1E-4 * (1.-zlamfac)                &
239                  &   + xlam1 * MAX( 0.e0, ( trn(ji,jj,jk,jpfer) * 1.e9 - 1.)  )
240#else
241               zlam1b = (  80.* (trn(ji,jj,jk,jpdoc) + 35E-6)           &
242                  &     + 698.*  trn(ji,jj,jk,jppoc)  )                    &
243                  &   * zdiss(ji,jj,jk) + 1E-4 * (1.-zlamfac)           &
244                  &   + xlam1 * MAX( 0.e0, ( trn(ji,jj,jk,jpfer) * 1.e9 - 1.)  )
245#endif
246
247# if defined key_off_degrad
248               xaggdfe(ji,jj,jk) = zlam1b * zstep * 0.5 * ( trn(ji,jj,jk,jpfer) - zfeequi ) * facvol(ji,jj,jk)
249# else
250               xaggdfe(ji,jj,jk) = zlam1b * zstep * 0.5 * ( trn(ji,jj,jk,jpfer) - zfeequi )
251# endif
252            END DO
253         END DO
254      END DO
255      !
256   END SUBROUTINE p4z_rem
257
258#else
259   !!======================================================================
260   !!  Dummy module :                                   No PISCES bio-model
261   !!======================================================================
262CONTAINS
263   SUBROUTINE p4z_rem                    ! Empty routine
264   END SUBROUTINE p4z_rem
265#endif 
266
267   !!======================================================================
268END MODULE p4zrem
Note: See TracBrowser for help on using the repository browser.