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.
p5zmort.F90 in NEMO/branches/2019/dev_r11613_ENHANCE-04_namelists_as_internalfiles/src/TOP/PISCES/P4Z – NEMO

source: NEMO/branches/2019/dev_r11613_ENHANCE-04_namelists_as_internalfiles/src/TOP/PISCES/P4Z/p5zmort.F90 @ 11671

Last change on this file since 11671 was 11671, checked in by acc, 5 years ago

Branch 2019/dev_r11613_ENHANCE-04_namelists_as_internalfiles. Final, non-substantive changes to complete this branch. These changes remove all REWIND statements on the old namelist fortran units (now character variables for internal files). These changes have been left until last since they are easily repeated via a script and it may be preferable to use the previous revision for merge purposes and reapply these last changes separately. This branch has been fully SETTE tested.

  • Property svn:keywords set to Id
File size: 14.3 KB
Line 
1MODULE p5zmort
2   !!======================================================================
3   !!                         ***  MODULE p5zmort  ***
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   !!             3.6  !  2015-05  (O. Aumont) PISCES quota
9   !!----------------------------------------------------------------------
10   !!   p5z_mort       :   Compute the mortality terms for phytoplankton
11   !!   p5z_mort_init  :   Initialize the mortality params for phytoplankton
12   !!----------------------------------------------------------------------
13   USE oce_trc         !  shared variables between ocean and passive tracers
14   USE trc             !  passive tracers common variables
15   USE sms_pisces      !  PISCES Source Minus Sink variables
16   USE p4zlim
17   USE p5zlim          !  Phytoplankton limitation terms
18   USE prtctl_trc      !  print control for debugging
19
20   IMPLICIT NONE
21   PRIVATE
22
23   PUBLIC   p5z_mort   
24   PUBLIC   p5z_mort_init   
25
26   !! * Shared module variables
27   REAL(wp), PUBLIC :: wchln    !:
28   REAL(wp), PUBLIC :: wchlp   !:
29   REAL(wp), PUBLIC :: wchld   !:
30   REAL(wp), PUBLIC :: wchldm  !:
31   REAL(wp), PUBLIC :: mpratn   !:
32   REAL(wp), PUBLIC :: mpratp  !:
33   REAL(wp), PUBLIC :: mpratd  !:
34
35   !!----------------------------------------------------------------------
36   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
37   !! $Id$
38   !! Software governed by the CeCILL license (see ./LICENSE)
39   !!----------------------------------------------------------------------
40
41CONTAINS
42
43   SUBROUTINE p5z_mort( kt )
44      !!---------------------------------------------------------------------
45      !!                     ***  ROUTINE p5z_mort  ***
46      !!
47      !! ** Purpose :   Calls the different subroutine to initialize and compute
48      !!                the different phytoplankton mortality terms
49      !!
50      !! ** Method  : - ???
51      !!---------------------------------------------------------------------
52      INTEGER, INTENT(in) ::   kt ! ocean time step
53      !!---------------------------------------------------------------------
54
55      CALL p5z_nano            ! nanophytoplankton
56      CALL p5z_pico            ! picophytoplankton
57      CALL p5z_diat            ! diatoms
58
59   END SUBROUTINE p5z_mort
60
61
62   SUBROUTINE p5z_nano
63      !!---------------------------------------------------------------------
64      !!                     ***  ROUTINE p5z_nano  ***
65      !!
66      !! ** Purpose :   Compute the mortality terms for nanophytoplankton
67      !!
68      !! ** Method  : - ???
69      !!---------------------------------------------------------------------
70      INTEGER  :: ji, jj, jk
71      REAL(wp) :: zcompaph
72      REAL(wp) :: zfactfe, zfactch, zfactn, zfactp, zprcaca
73      REAL(wp) :: ztortp , zrespp , zmortp
74      CHARACTER (len=25) :: charout
75      !!---------------------------------------------------------------------
76      !
77      IF( ln_timing )   CALL timing_start('p5z_nano')
78      !
79      prodcal(:,:,:) = 0.  !: calcite production variable set to zero
80      DO jk = 1, jpkm1
81         DO jj = 1, jpj
82            DO ji = 1, jpi
83               zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - 1e-9 ), 0.e0 )
84               !   Squared mortality of Phyto similar to a sedimentation term during
85               !   blooms (Doney et al. 1996)
86               !   -----------------------------------------------------------------
87               zrespp = wchln * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * trb(ji,jj,jk,jpphy)
88
89               !   Phytoplankton linear mortality
90               !   ------------------------------
91               ztortp = mpratn * xstep  * zcompaph
92               zmortp = zrespp + ztortp
93
94               !   Update the arrays TRA which contains the biological sources and sinks
95
96               zfactn  = trb(ji,jj,jk,jpnph)/(trb(ji,jj,jk,jpphy)+rtrn)
97               zfactp  = trb(ji,jj,jk,jppph)/(trb(ji,jj,jk,jpphy)+rtrn)
98               zfactfe = trb(ji,jj,jk,jpnfe)/(trb(ji,jj,jk,jpphy)+rtrn)
99               zfactch = trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn)
100               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zmortp
101               tra(ji,jj,jk,jpnph) = tra(ji,jj,jk,jpnph) - zmortp * zfactn
102               tra(ji,jj,jk,jppph) = tra(ji,jj,jk,jppph) - zmortp * zfactp
103               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zmortp * zfactch
104               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zmortp * zfactfe
105               zprcaca = xfracal(ji,jj,jk) * zmortp
106               !
107               prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo)
108               !
109               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprcaca
110               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca
111               tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca
112               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortp
113               tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + zmortp * zfactn
114               tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + zmortp * zfactp
115               prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zmortp
116               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zmortp * zfactfe
117            END DO
118         END DO
119      END DO
120      !
121       IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
122         WRITE(charout, FMT="('nano')")
123         CALL prt_ctl_trc_info(charout)
124         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
125       ENDIF
126      !
127      IF( ln_timing )   CALL timing_stop('p5z_nano')
128      !
129   END SUBROUTINE p5z_nano
130
131
132   SUBROUTINE p5z_pico
133      !!---------------------------------------------------------------------
134      !!                     ***  ROUTINE p5z_pico  ***
135      !!
136      !! ** Purpose :   Compute the mortality terms for picophytoplankton
137      !!
138      !! ** Method  : - ???
139      !!---------------------------------------------------------------------
140      INTEGER  :: ji, jj, jk
141      REAL(wp) :: zcompaph
142      REAL(wp) :: zfactfe, zfactch, zfactn, zfactp
143      REAL(wp) :: ztortp , zrespp , zmortp 
144      CHARACTER (len=25) :: charout
145      !!---------------------------------------------------------------------
146      !
147      IF( ln_timing )   CALL timing_start('p5z_pico')
148      !
149      DO jk = 1, jpkm1
150         DO jj = 1, jpj
151            DO ji = 1, jpi
152               zcompaph = MAX( ( trb(ji,jj,jk,jppic) - 1e-9 ), 0.e0 )
153               !  Squared mortality of Phyto similar to a sedimentation term during
154               !  blooms (Doney et al. 1996)
155               !  -----------------------------------------------------------------
156               zrespp = wchlp * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * trb(ji,jj,jk,jppic)
157
158               !     Phytoplankton mortality
159               ztortp = mpratp * xstep  * zcompaph
160               zmortp = zrespp + ztortp
161
162               !   Update the arrays TRA which contains the biological sources and sinks
163
164               zfactn = trb(ji,jj,jk,jpnpi)/(trb(ji,jj,jk,jppic)+rtrn)
165               zfactp = trb(ji,jj,jk,jpppi)/(trb(ji,jj,jk,jppic)+rtrn)
166               zfactfe = trb(ji,jj,jk,jppfe)/(trb(ji,jj,jk,jppic)+rtrn)
167               zfactch = trb(ji,jj,jk,jppch)/(trb(ji,jj,jk,jppic)+rtrn)
168               tra(ji,jj,jk,jppic) = tra(ji,jj,jk,jppic) - zmortp
169               tra(ji,jj,jk,jpnpi) = tra(ji,jj,jk,jpnpi) - zmortp * zfactn
170               tra(ji,jj,jk,jpppi) = tra(ji,jj,jk,jpppi) - zmortp * zfactp
171               tra(ji,jj,jk,jppch) = tra(ji,jj,jk,jppch) - zmortp * zfactch
172               tra(ji,jj,jk,jppfe) = tra(ji,jj,jk,jppfe) - zmortp * zfactfe
173               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortp
174               tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + zmortp * zfactn
175               tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + zmortp * zfactp
176               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zmortp * zfactfe
177               prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zmortp
178            END DO
179         END DO
180      END DO
181      !
182       IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
183         WRITE(charout, FMT="('pico')")
184         CALL prt_ctl_trc_info(charout)
185         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
186       ENDIF
187      !
188      IF( ln_timing )   CALL timing_stop('p5z_pico')
189      !
190   END SUBROUTINE p5z_pico
191
192
193   SUBROUTINE p5z_diat
194      !!---------------------------------------------------------------------
195      !!                     ***  ROUTINE p5z_diat  ***
196      !!
197      !! ** Purpose :   Compute the mortality terms for diatoms
198      !!
199      !! ** Method  : - ???
200      !!---------------------------------------------------------------------
201      INTEGER  ::  ji, jj, jk
202      REAL(wp) ::  zfactfe,zfactsi,zfactch, zfactn, zfactp, zcompadi
203      REAL(wp) ::  zrespp2, ztortp2, zmortp2
204      REAL(wp) ::  zlim2, zlim1
205      CHARACTER (len=25) :: charout
206      !!---------------------------------------------------------------------
207      !
208      IF( ln_timing )   CALL timing_start('p5z_diat')
209      !
210
211      DO jk = 1, jpkm1
212         DO jj = 1, jpj
213            DO ji = 1, jpi
214
215               zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - 1E-9), 0. )
216
217               !   Aggregation term for diatoms is increased in case of nutrient
218               !   stress as observed in reality. The stressed cells become more
219               !   sticky and coagulate to sink quickly out of the euphotic zone
220               !   -------------------------------------------------------------
221               !  Phytoplankton squared mortality
222               !  -------------------------------
223               zlim2   = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk)
224               zlim1   = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) 
225               zrespp2 = 1.e6 * xstep * (  wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia)
226
227               !  Phytoplankton linear mortality
228               !  ------------------------------
229               ztortp2 = mpratd * xstep  * zcompadi
230               zmortp2 = zrespp2 + ztortp2
231
232               !   Update the arrays tra which contains the biological sources and sinks
233               !   ---------------------------------------------------------------------
234               zfactn  = trb(ji,jj,jk,jpndi) / ( trb(ji,jj,jk,jpdia) + rtrn )
235               zfactp  = trb(ji,jj,jk,jppdi) / ( trb(ji,jj,jk,jpdia) + rtrn )
236               zfactch = trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn )
237               zfactfe = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn )
238               zfactsi = trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn )
239               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zmortp2 
240               tra(ji,jj,jk,jpndi) = tra(ji,jj,jk,jpndi) - zmortp2 * zfactn
241               tra(ji,jj,jk,jppdi) = tra(ji,jj,jk,jppdi) - zmortp2 * zfactp
242               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zmortp2 * zfactch
243               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zmortp2 * zfactfe
244               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zmortp2 * zfactsi
245               tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zmortp2 * zfactsi
246               tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zrespp2 
247               tra(ji,jj,jk,jpgon) = tra(ji,jj,jk,jpgon) + zrespp2 * zfactn
248               tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) + zrespp2 * zfactp
249               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zrespp2 * zfactfe
250               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + ztortp2
251               tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + ztortp2 * zfactn
252               tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + ztortp2 * zfactp
253               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ztortp2 * zfactfe
254               prodpoc(ji,jj,jk)   = prodpoc(ji,jj,jk) + ztortp2
255               prodgoc(ji,jj,jk)   = prodgoc(ji,jj,jk) + zrespp2
256            END DO
257         END DO
258      END DO
259      !
260      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
261         WRITE(charout, FMT="('diat')")
262         CALL prt_ctl_trc_info(charout)
263         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
264      ENDIF
265      !
266      IF( ln_timing )   CALL timing_stop('p5z_diat')
267      !
268   END SUBROUTINE p5z_diat
269
270
271   SUBROUTINE p5z_mort_init
272      !!----------------------------------------------------------------------
273      !!                  ***  ROUTINE p5z_mort_init  ***
274      !!
275      !! ** Purpose :   Initialization of phytoplankton parameters
276      !!
277      !! ** Method  :   Read the nampismort namelist and check the parameters
278      !!      called at the first timestep
279      !!
280      !! ** input   :   Namelist nampismort
281      !!
282      !!----------------------------------------------------------------------
283      INTEGER :: ios                 ! Local integer output status for namelist read
284      !!
285      NAMELIST/namp5zmort/ wchln, wchlp, wchld, wchldm, mpratn, mpratp, mpratd
286      !!----------------------------------------------------------------------
287
288      READ  ( numnatp_ref, namp5zmort, IOSTAT = ios, ERR = 901)
289901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zmort in reference namelist' )
290
291      READ  ( numnatp_cfg, namp5zmort, IOSTAT = ios, ERR = 902 )
292902   IF( ios >  0 ) CALL ctl_nam ( ios , 'namp5zmort in configuration namelist' )
293      IF(lwm) WRITE ( numonp, namp5zmort )
294
295      IF(lwp) THEN                         ! control print
296         WRITE(numout,*) ' '
297         WRITE(numout,*) ' Namelist parameters for phytoplankton mortality, namp5zmort'
298         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
299         WRITE(numout,*) '    quadratic mortality of phytoplankton      wchln     =', wchln
300         WRITE(numout,*) '    quadratic mortality of picophyto.         wchlp     =', wchlp
301         WRITE(numout,*) '    quadratic mortality of diatoms            wchld     =', wchld
302         WRITE(numout,*) '    Additional quadratic mortality of diatoms wchldm    =', wchldm
303         WRITE(numout,*) '    nanophyto. mortality rate                 mpratn    =', mpratn
304         WRITE(numout,*) '    picophyto. mortality rate                 mpratp    =', mpratp
305         WRITE(numout,*) '    Diatoms mortality rate                    mpratd    =', mpratd
306      ENDIF
307
308   END SUBROUTINE p5z_mort_init
309
310   !!======================================================================
311END MODULE p5zmort
Note: See TracBrowser for help on using the repository browser.