New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
p4zmort.F90 in branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/TOP_SRC/PISCES – NEMO

source: branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zmort.F90 @ 3153

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

dev_LOCEAN_2011:minor bug correction to avoid compilation errors, see ticket #877

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