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/DEV_r1784_mid_year_merge_2010/NEMO/TOP_SRC/PISCES – NEMO

source: branches/DEV_r1784_mid_year_merge_2010/NEMO/TOP_SRC/PISCES/p4zmort.F90 @ 1953

Last change on this file since 1953 was 1953, checked in by acc, 14 years ago

ticket #684 step 3: Add in changes from the trunk between revisions 1784 and 1821. No conflicts so far

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