source: trunk/NEMO/TOP_SRC/PISCES/p4zmort.F90 @ 935

Last change on this file since 935 was 935, checked in by cetlod, 13 years ago

adding modules for PISCES SMS model, see ticket 141

  • Property svn:executable set to *
File size: 11.4 KB
Line 
1MODULE p4zmort
2   !!======================================================================
3   !!                         ***  MODULE p4zmort  ***
4   !! TOP :   PISCES Compute the mortality terms for phytoplankton
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_mort       :   Compute the mortality terms for phytoplankton
14   !!   p4z_mort_init  :   Initialize the mortality params for phytoplankton
15   !!----------------------------------------------------------------------
16   USE trc
17   USE oce_trc         !
18   USE trp_trc         !
19   USE sms             !
20   USE p4zsink
21   USE prtctl_trc
22
23   IMPLICIT NONE
24   PRIVATE
25
26   PUBLIC   p4z_mort         ! called in p4zbio.F90
27
28
29   !! * Shared module variables
30   REAL(wp), PUBLIC ::   wchl = 0.001_wp      ,  &  !:
31     &                   wchld = 0.02_wp      ,  &  !:
32     &                   mprat = 0.01_wp      ,  &  !:
33     &                   mprat2 = 0.01_wp     ,  &  !:
34     &                   mpratm = 0.01_wp           !:
35
36   !! * Module variables
37   REAL(wp) :: zstep
38
39
40
41   !!* Substitution
42#  include "domzgr_substitute.h90"
43   !!----------------------------------------------------------------------
44   !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)
45   !! $Header:$
46   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
47   !!----------------------------------------------------------------------
48
49CONTAINS
50
51   SUBROUTINE p4z_mort( kt, jnt )
52      !!---------------------------------------------------------------------
53      !!                     ***  ROUTINE p4z_mort  ***
54      !!
55      !! ** Purpose :   Calls the different subroutine to initialize and compute
56      !!                the different phytoplankton mortality terms
57      !!
58      !! ** Method  : - ???
59      !!---------------------------------------------------------------------
60      INTEGER, INTENT(in) ::   kt, jnt ! ocean time step
61      !!---------------------------------------------------------------------
62
63      IF( ( kt * jnt ) == nittrc000  )   CALL p4z_mort_init      ! Initialization (first time-step only)
64
65      zstep = rfact2 / rjjss      ! Time step duration for biology
66
67      CALL p4z_nano            ! nanophytoplankton
68
69      CALL p4z_diat            ! diatoms
70
71   END SUBROUTINE p4z_mort
72
73
74   SUBROUTINE p4z_nano
75      !!---------------------------------------------------------------------
76      !!                     ***  ROUTINE p4z_nano  ***
77      !!
78      !! ** Purpose :   Compute the mortality terms for nanophytoplankton
79      !!
80      !! ** Method  : - ???
81      !!---------------------------------------------------------------------
82      INTEGER  :: ji, jj, jk
83      REAL(wp) :: zcompaph
84      REAL(wp) :: zfactfe,zfactch,zprcaca,zfracal
85      REAL(wp) :: ztortp,zrespp,zmortp
86      CHARACTER (len=25) :: charout
87      !!---------------------------------------------------------------------
88
89
90      DO jk = 1, jpkm1
91         DO jj = 1, jpj
92            DO ji = 1, jpi
93
94               zcompaph = MAX( ( trn(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 )
95
96!     Squared mortality of Phyto similar to a sedimentation term during
97!     blooms (Doney et al. 1996)
98!     -----------------------------------------------------------------
99               zrespp = wchl * 1.e6 * zstep * xdiss(ji,jj,jk)   &
100# if defined key_off_degrad
101                  &        * facvol(ji,jj,jk)     &
102# endif
103                  &        * zcompaph * trn(ji,jj,jk,jpphy)
104
105!     Phytoplankton mortality. This mortality loss is slightly
106!     increased when nutrients are limiting phytoplankton growth
107!     as observed for instance in case of iron limitation.
108!     ----------------------------------------------------------
109               ztortp = mprat * zstep * trn(ji,jj,jk,jpphy)          &
110# if defined key_off_degrad
111                  &          * facvol(ji,jj,jk)     &
112# endif
113                  &   / ( xkmort + trn(ji,jj,jk,jpphy) ) * zcompaph
114
115
116               zmortp = zrespp + ztortp
117
118               !   Update the arrays TRA which contains the biological sources and sinks
119
120               zfactfe = trn(ji,jj,jk,jpnfe)/(trn(ji,jj,jk,jpphy)+rtrn)
121               zfactch = trn(ji,jj,jk,jpnch)/(trn(ji,jj,jk,jpphy)+rtrn)
122
123               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zmortp
124               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zmortp * zfactch
125               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zmortp * zfactfe
126               zprcaca = xfracal(ji,jj,jk) * zmortp
127               zfracal = 0.5 * xfracal(ji,jj,jk)
128               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprcaca
129               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca
130               tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca
131#if defined key_kriest
132               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortp
133               tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ztortp * xkr_dnano + zrespp * xkr_ddiat
134               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zmortp * zfactfe
135#else
136               tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zfracal * zmortp
137               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + ( 1. - zfracal ) * zmortp
138               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ( 1. - zfracal ) * zmortp * zfactfe
139               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zfracal * zmortp * zfactfe
140#endif
141            END DO
142         END DO
143      END DO
144      !
145       IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
146         WRITE(charout, FMT="('nano')")
147         CALL prt_ctl_trc_info(charout)
148         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
149       ENDIF
150
151   END SUBROUTINE p4z_nano
152
153   SUBROUTINE p4z_diat
154      !!---------------------------------------------------------------------
155      !!                     ***  ROUTINE p4z_diat  ***
156      !!
157      !! ** Purpose :   Compute the mortality terms for diatoms
158      !!
159      !! ** Method  : - ???
160      !!---------------------------------------------------------------------
161      INTEGER  ::  ji, jj, jk
162      REAL(wp) ::  zfactfe,zfactsi,zfactch, zcompadi
163      REAL(wp) ::  zrespp2, ztortp2, zmortp2
164      CHARACTER (len=25) :: charout
165 
166      !!---------------------------------------------------------------------
167
168
169!    Aggregation term for diatoms is increased in case of nutrient
170!    stress as observed in reality. The stressed cells become more
171!    sticky and coagulate to sink quickly out of the euphotic zone
172!     ------------------------------------------------------------
173
174      DO jk = 1, jpkm1
175         DO jj = 1, jpj
176            DO ji = 1, jpi
177
178               zcompadi = MAX( ( trn(ji,jj,jk,jpdia) - 1e-8), 0. )
179
180!    Aggregation term for diatoms is increased in case of nutrient
181!    stress as observed in reality. The stressed cells become more
182!    sticky and coagulate to sink quickly out of the euphotic zone
183!     ------------------------------------------------------------
184
185               zrespp2  = 1.e6 * zstep * (  wchl + wchld * ( 1.- xlimdia(ji,jj,jk) )  )    &
186# if defined key_off_degrad
187                  &       * facvol(ji,jj,jk)       &
188# endif
189                  &       * xdiss(ji,jj,jk) * zcompadi * trn(ji,jj,jk,jpdia)
190                                                                               
191
192!     Phytoplankton mortality.
193!     ------------------------
194               ztortp2  = mprat2 * zstep * trn(ji,jj,jk,jpdia)     &
195# if defined key_off_degrad
196                  &        * facvol(ji,jj,jk)       &
197# endif
198                  &      / ( xkmort + trn(ji,jj,jk,jpdia) ) * zcompadi
199
200                zmortp2 = zrespp2 + ztortp2
201
202!   Update the arrays tra which contains the biological sources and sinks
203!   ---------------------------------------------------------------------
204               zfactch = trn(ji,jj,jk,jpdch) / ( trn(ji,jj,jk,jpdia) + rtrn )
205               zfactfe = trn(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn )
206               zfactsi = trn(ji,jj,jk,jpbsi) / ( trn(ji,jj,jk,jpdia) + rtrn )
207
208               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zmortp2 
209               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zmortp2 * zfactch
210               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zmortp2 * zfactfe
211               tra(ji,jj,jk,jpbsi) = tra(ji,jj,jk,jpbsi) - zmortp2 * zfactsi
212               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zmortp2 * zfactsi
213#if defined key_kriest
214               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortp2 
215               tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ztortp2 * xkr_ddiat + zrespp2 * xkr_daggr
216               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zmortp2 * zfactfe
217#else
218               tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zrespp2 + 0.5 * ztortp2
219               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + 0.5 * ztortp2
220               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + 0.5 * ztortp2 * zfactfe
221               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ( zrespp2 + 0.5 * ztortp2 ) * zfactfe
222#endif
223            END DO
224         END DO
225      END DO
226      !
227        IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
228         WRITE(charout, FMT="('diat')")
229         CALL prt_ctl_trc_info(charout)
230         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
231       ENDIF
232             
233   END SUBROUTINE p4z_diat
234
235   SUBROUTINE p4z_mort_init
236
237      !!----------------------------------------------------------------------
238      !!                  ***  ROUTINE p4z_mort_init  ***
239      !!
240      !! ** Purpose :   Initialization of phytoplankton parameters
241      !!
242      !! ** Method  :   Read the natmort namelist and check the parameters
243      !!      called at the first timestep (nittrc000)
244      !!
245      !! ** input   :   Namelist natmort
246      !!
247      !!----------------------------------------------------------------------
248
249      NAMELIST/natmort/ wchl, wchld, mprat, mprat2, mpratm
250
251      REWIND( numnat )                     ! read numnat
252      READ  ( numnat, natmort )
253
254      IF(lwp) THEN                         ! control print
255         WRITE(numout,*) ' '
256         WRITE(numout,*) ' Namelist parameters for phytoplankton mortality, natmort'
257         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
258         WRITE(numout,*) '    quadratic mortality of phytoplankton      wchl      =', wchl
259         WRITE(numout,*) '    maximum quadratic mortality of diatoms    wchld     =', wchld
260         WRITE(numout,*) '    phytoplankton mortality rate              mprat     =', mprat
261         WRITE(numout,*) '    Diatoms mortality rate                    mprat2    =', mprat2
262         WRITE(numout,*) '    Phytoplankton minimum mortality rate      mpratm    =', mpratm
263      ENDIF
264
265   END SUBROUTINE p4z_mort_init
266
267#else
268   !!======================================================================
269   !!  Dummy module :                                   No PISCES bio-model
270   !!======================================================================
271CONTAINS
272   SUBROUTINE p4z_mort                    ! Empty routine
273   END SUBROUTINE p4z_mort
274#endif 
275
276   !!======================================================================
277END MODULE  p4zmort
Note: See TracBrowser for help on using the repository browser.