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.
p4zmicro.F90 in branches/2015/dev_r5803_NOC_WAD/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z – NEMO

source: branches/2015/dev_r5803_NOC_WAD/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90 @ 5870

Last change on this file since 5870 was 5870, checked in by acc, 8 years ago

Branch 2015/dev_r5803_NOC_WAD. Merge in trunk changes from 5803 to 5869 in preparation for merge. Also tidied and reorganised some wetting and drying code. Renamed wadlmt.F90 to wetdry.F90. Wetting drying code changes restricted to domzgr.F90, domvvl.F90 nemogcm.F90 sshwzv.F90, dynspg_ts.F90, wetdry.F90 and dynhpg.F90. Code passes full SETTE tests with ln_wd=.false.. Still awaiting test case for checking with ln_wd=.false.

File size: 14.5 KB
Line 
1MODULE p4zmicro
2   !!======================================================================
3   !!                         ***  MODULE p4zmicro  ***
4   !! TOP :   PISCES Compute the sources/sinks for microzooplankton
5   !!======================================================================
6   !! History :   1.0  !  2004     (O. Aumont) Original code
7   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90
8   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Quota model for iron
9   !!----------------------------------------------------------------------
10#if defined key_pisces
11   !!----------------------------------------------------------------------
12   !!   'key_pisces'                                       PISCES bio-model
13   !!----------------------------------------------------------------------
14   !!   p4z_micro       :   Compute the sources/sinks for microzooplankton
15   !!   p4z_micro_init  :   Initialize and read the appropriate namelist
16   !!----------------------------------------------------------------------
17   USE oce_trc         !  shared variables between ocean and passive tracers
18   USE trc             !  passive tracers common variables
19   USE sms_pisces      !  PISCES Source Minus Sink variables
20   USE p4zlim          !  Co-limitations
21   USE p4zsink         !  vertical flux of particulate matter due to sinking
22   USE p4zint          !  interpolation and computation of various fields
23   USE p4zprod         !  production
24   USE iom             !  I/O manager
25   USE prtctl_trc      !  print control for debugging
26
27   IMPLICIT NONE
28   PRIVATE
29
30   PUBLIC   p4z_micro         ! called in p4zbio.F90
31   PUBLIC   p4z_micro_init    ! called in trcsms_pisces.F90
32
33   !! * Shared module variables
34   REAL(wp), PUBLIC ::  part        !: part of calcite not dissolved in microzoo guts
35   REAL(wp), PUBLIC ::  xpref2c     !: microzoo preference for POC
36   REAL(wp), PUBLIC ::  xpref2p     !: microzoo preference for nanophyto
37   REAL(wp), PUBLIC ::  xpref2d     !: microzoo preference for diatoms
38   REAL(wp), PUBLIC ::  xthreshdia  !: diatoms feeding threshold for microzooplankton
39   REAL(wp), PUBLIC ::  xthreshphy  !: nanophyto threshold for microzooplankton
40   REAL(wp), PUBLIC ::  xthreshpoc  !: poc threshold for microzooplankton
41   REAL(wp), PUBLIC ::  xthresh     !: feeding threshold for microzooplankton
42   REAL(wp), PUBLIC ::  resrat      !: exsudation rate of microzooplankton
43   REAL(wp), PUBLIC ::  mzrat       !: microzooplankton mortality rate
44   REAL(wp), PUBLIC ::  grazrat     !: maximal microzoo grazing rate
45   REAL(wp), PUBLIC ::  xkgraz      !: non assimilated fraction of P by microzoo
46   REAL(wp), PUBLIC ::  unass       !: Efficicency of microzoo growth
47   REAL(wp), PUBLIC ::  sigma1      !: Fraction of microzoo excretion as DOM
48   REAL(wp), PUBLIC ::  epsher      !: half sturation constant for grazing 1
49
50
51   !!----------------------------------------------------------------------
52   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
53   !! $Id: p4zmicro.F90 3160 2011-11-20 14:27:18Z cetlod $
54   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
55   !!----------------------------------------------------------------------
56
57CONTAINS
58
59   SUBROUTINE p4z_micro( kt, knt )
60      !!---------------------------------------------------------------------
61      !!                     ***  ROUTINE p4z_micro  ***
62      !!
63      !! ** Purpose :   Compute the sources/sinks for microzooplankton
64      !!
65      !! ** Method  : - ???
66      !!---------------------------------------------------------------------
67      INTEGER, INTENT(in) ::  kt  ! ocean time step
68      INTEGER, INTENT(in) ::  knt 
69      !
70      INTEGER  :: ji, jj, jk
71      REAL(wp) :: zcompadi, zcompaz , zcompaph, zcompapoc
72      REAL(wp) :: zgraze  , zdenom, zdenom2
73      REAL(wp) :: zfact   , zstep, zfood, zfoodlim
74      REAL(wp) :: zepshert, zepsherv, zgrarsig, zgraztot, zgraztotn, zgraztotf
75      REAL(wp) :: zgrarem, zgrafer, zgrapoc, zprcaca, zmortz
76      REAL(wp) :: zrespz, ztortz, zgrasrat, zgrasratn
77      REAL(wp) :: zgrazp, zgrazm, zgrazsd
78      REAL(wp) :: zgrazmf, zgrazsf, zgrazpf
79      REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d
80      CHARACTER (len=25) :: charout
81      !!---------------------------------------------------------------------
82      !
83      IF( nn_timing == 1 )  CALL timing_start('p4z_micro')
84      !
85      IF( lk_iomput )  CALL wrk_alloc( jpi, jpj, jpk, zgrazing )
86      !
87      DO jk = 1, jpkm1
88         DO jj = 1, jpj
89            DO ji = 1, jpi
90               zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 )
91               zstep   = xstep
92# if defined key_degrad
93               zstep = zstep * facvol(ji,jj,jk)
94# endif
95               zfact   = zstep * tgfunc2(ji,jj,jk) * zcompaz
96
97               !  Respiration rates of both zooplankton
98               !  -------------------------------------
99               zrespz = resrat * zfact * trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) )  &
100                  &   + resrat * zfact * 3. * nitrfac(ji,jj,jk)
101
102               !  Zooplankton mortality. A square function has been selected with
103               !  no real reason except that it seems to be more stable and may mimic predation.
104               !  ---------------------------------------------------------------
105               ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo)
106
107               zcompadi  = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia )
108               zcompaph  = MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 )
109               zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 )
110               
111               !     Microzooplankton grazing
112               !     ------------------------
113               zfood     = xpref2p * zcompaph + xpref2c * zcompapoc + xpref2d * zcompadi
114               zfoodlim  = MAX( 0. , zfood - min(xthresh,0.5*zfood) )
115               zdenom    = zfoodlim / ( xkgraz + zfoodlim )
116               zdenom2   = zdenom / ( zfood + rtrn )
117               zgraze    = grazrat * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) 
118
119               zgrazp    = zgraze  * xpref2p * zcompaph  * zdenom2 
120               zgrazm    = zgraze  * xpref2c * zcompapoc * zdenom2 
121               zgrazsd   = zgraze  * xpref2d * zcompadi  * zdenom2 
122
123               zgrazpf   = zgrazp  * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn)
124               zgrazmf   = zgrazm  * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn)
125               zgrazsf   = zgrazsd * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn)
126               !
127               zgraztot  = zgrazp  + zgrazm  + zgrazsd 
128               zgraztotf = zgrazpf + zgrazsf + zgrazmf 
129               zgraztotn = zgrazp * quotan(ji,jj,jk) + zgrazm + zgrazsd * quotad(ji,jj,jk)
130
131               ! Grazing by microzooplankton
132               IF( ln_diatrc .AND. lk_iomput )  zgrazing(ji,jj,jk) = zgraztot
133
134               !    Various remineralization and excretion terms
135               !    --------------------------------------------
136               zgrasrat  = ( zgraztotf + rtrn ) / ( zgraztot + rtrn )
137               zgrasratn = ( zgraztotn + rtrn ) / ( zgraztot + rtrn )
138               zepshert  =  MIN( 1., zgrasratn, zgrasrat / ferat3)
139               zepsherv  = zepshert * MIN( epsher, (1. - unass) * zgrasrat / ferat3, (1. - unass) * zgrasratn )
140               zgrafer   = zgraztot * MAX( 0. , ( 1. - unass ) * zgrasrat - ferat3 * zepsherv ) 
141               zgrarem   = zgraztot * ( 1. - zepsherv - unass )
142               zgrapoc   = zgraztot * unass
143
144               !  Update of the TRA arrays
145               !  ------------------------
146               zgrarsig  = zgrarem * sigma1
147               tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarsig
148               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgrarsig
149               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem - zgrarsig
150               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig
151               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer
152               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc
153               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zgraztotf * unass
154               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig
155               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig
156#if defined key_kriest
157               tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc * xkr_dmicro
158#endif
159               !   Update the arrays TRA which contain the biological sources and sinks
160               !   --------------------------------------------------------------------
161               zmortz = ztortz + zrespz
162               tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz + zepsherv * zgraztot 
163               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazp
164               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazsd
165               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazp  * trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn)
166               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazsd * trb(ji,jj,jk,jpdch)/(trb(ji,jj,jk,jpdia)+rtrn)
167               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn)
168               tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn)
169               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgrazpf
170               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazsf
171               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortz - zgrazm
172               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz - zgrazmf
173               !
174               ! calcite production
175               zprcaca = xfracal(ji,jj,jk) * zgrazp
176               prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo)
177               !
178               zprcaca = part * zprcaca
179               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprcaca
180               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca
181               tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca
182#if defined key_kriest
183               tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zmortz * xkr_dmicro &
184                                                         - zgrazm * trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn )
185#endif
186            END DO
187         END DO
188      END DO
189      !
190      IF( lk_iomput .AND. knt == nrdttrc ) THEN
191         CALL wrk_alloc( jpi, jpj, jpk, zw3d )
192         IF( iom_use( "GRAZ1" ) ) THEN
193            zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)  !  Total grazing of phyto by zooplankton
194            CALL iom_put( "GRAZ1", zw3d )
195         ENDIF
196         CALL wrk_dealloc( jpi, jpj, jpk, zw3d )
197      ENDIF
198      !
199      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
200         WRITE(charout, FMT="('micro')")
201         CALL prt_ctl_trc_info(charout)
202         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
203      ENDIF
204      !
205      IF( lk_iomput )  CALL wrk_dealloc( jpi, jpj, jpk, zgrazing )
206      !
207      IF( nn_timing == 1 )  CALL timing_stop('p4z_micro')
208      !
209   END SUBROUTINE p4z_micro
210
211
212   SUBROUTINE p4z_micro_init
213
214      !!----------------------------------------------------------------------
215      !!                  ***  ROUTINE p4z_micro_init  ***
216      !!
217      !! ** Purpose :   Initialization of microzooplankton parameters
218      !!
219      !! ** Method  :   Read the nampiszoo namelist and check the parameters
220      !!                called at the first timestep (nittrc000)
221      !!
222      !! ** input   :   Namelist nampiszoo
223      !!
224      !!----------------------------------------------------------------------
225
226      NAMELIST/nampiszoo/ part, grazrat, resrat, mzrat, xpref2c, xpref2p, &
227         &                xpref2d,  xthreshdia,  xthreshphy,  xthreshpoc, &
228         &                xthresh, xkgraz, epsher, sigma1, unass
229      INTEGER :: ios                 ! Local integer output status for namelist read
230
231      REWIND( numnatp_ref )              ! Namelist nampiszoo in reference namelist : Pisces microzooplankton
232      READ  ( numnatp_ref, nampiszoo, IOSTAT = ios, ERR = 901)
233901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiszoo in reference namelist', lwp )
234
235      REWIND( numnatp_cfg )              ! Namelist nampiszoo in configuration namelist : Pisces microzooplankton
236      READ  ( numnatp_cfg, nampiszoo, IOSTAT = ios, ERR = 902 )
237902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiszoo in configuration namelist', lwp )
238      IF(lwm) WRITE ( numonp, nampiszoo )
239
240      IF(lwp) THEN                         ! control print
241         WRITE(numout,*) ' '
242         WRITE(numout,*) ' Namelist parameters for microzooplankton, nampiszoo'
243         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
244         WRITE(numout,*) '    part of calcite not dissolved in microzoo guts  part        =', part
245         WRITE(numout,*) '    microzoo preference for POC                     xpref2c     =', xpref2c
246         WRITE(numout,*) '    microzoo preference for nano                    xpref2p     =', xpref2p
247         WRITE(numout,*) '    microzoo preference for diatoms                 xpref2d     =', xpref2d
248         WRITE(numout,*) '    diatoms feeding threshold  for microzoo         xthreshdia  =', xthreshdia
249         WRITE(numout,*) '    nanophyto feeding threshold for microzoo        xthreshphy  =', xthreshphy
250         WRITE(numout,*) '    poc feeding threshold for microzoo              xthreshpoc  =', xthreshpoc
251         WRITE(numout,*) '    feeding threshold for microzooplankton          xthresh     =', xthresh
252         WRITE(numout,*) '    exsudation rate of microzooplankton             resrat      =', resrat
253         WRITE(numout,*) '    microzooplankton mortality rate                 mzrat       =', mzrat
254         WRITE(numout,*) '    maximal microzoo grazing rate                   grazrat     =', grazrat
255         WRITE(numout,*) '    non assimilated fraction of P by microzoo       unass       =', unass
256         WRITE(numout,*) '    Efficicency of microzoo growth                  epsher      =', epsher
257         WRITE(numout,*) '    Fraction of microzoo excretion as DOM           sigma1      =', sigma1
258         WRITE(numout,*) '    half sturation constant for grazing 1           xkgraz      =', xkgraz
259      ENDIF
260
261   END SUBROUTINE p4z_micro_init
262
263#else
264   !!======================================================================
265   !!  Dummy module :                                   No PISCES bio-model
266   !!======================================================================
267CONTAINS
268   SUBROUTINE p4z_micro                    ! Empty routine
269   END SUBROUTINE p4z_micro
270#endif 
271
272   !!======================================================================
273END MODULE p4zmicro
Note: See TracBrowser for help on using the repository browser.