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.
p4zagg.F90 in NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z – NEMO

source: NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zagg.F90 @ 13233

Last change on this file since 13233 was 13233, checked in by aumont, 4 years ago

update of the PISCES comments

  • Property svn:keywords set to Id
File size: 10.4 KB
Line 
1MODULE p4zagg
2   !!======================================================================
3   !!                         ***  MODULE p4zagg  ***
4   !! TOP :  PISCES  aggregation of particles (DOC, POC, GOC)
5   !!        This module is the same for both PISCES and PISCES-QUOTA
6   !!======================================================================
7   !! History :   1.0  !  2004     (O. Aumont) Original code
8   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90
9   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Change aggregation formula
10   !!             3.5  !  2012-07  (O. Aumont) Introduce potential time-splitting
11   !!             3.6  !  2015-05  (O. Aumont) PISCES quota
12   !!----------------------------------------------------------------------
13
14   !!----------------------------------------------------------------------
15   !!   p4z_agg       :  Compute aggregation of particles
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 prtctl_trc      !  print control for debugging
21
22   IMPLICIT NONE
23   PRIVATE
24
25   PUBLIC   p4z_agg         ! called in p4zbio.F90
26
27   !!----------------------------------------------------------------------
28   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
29   !! $Id$
30   !! Software governed by the CeCILL license (see ./LICENSE)
31   !!----------------------------------------------------------------------
32CONTAINS
33
34   SUBROUTINE p4z_agg ( kt, knt )
35      !!---------------------------------------------------------------------
36      !!                     ***  ROUTINE p4z_agg  ***
37      !!
38      !! ** Purpose :   Compute aggregation of particle. Aggregation by
39      !!                brownian motion, differential settling and shear
40      !!                are considered.
41      !!
42      !! ** Method  : - Aggregation rates are computed assuming a fixed and
43      !!                constant size spectrum in the different particulate
44      !!                pools. The coagulation rates have been computed
45      !!                externally using dedicated programs (O. Aumont). They
46      !!                are hard-coded because they can't be changed
47      !!                independently of each other.
48      !!---------------------------------------------------------------------
49      INTEGER, INTENT(in) ::   kt, knt   !
50      !
51      INTEGER  ::   ji, jj, jk
52      REAL(wp) ::   zagg, zagg1, zagg2, zagg3, zagg4
53      REAL(wp) ::   zaggpoc1, zaggpoc2, zaggpoc3, zaggpoc4
54      REAL(wp) ::   zaggpoc , zaggfe, zaggdoc, zaggdoc2, zaggdoc3
55      REAL(wp) ::   zaggpon , zaggdon, zaggdon2, zaggdon3
56      REAL(wp) ::   zaggpop, zaggdop, zaggdop2, zaggdop3
57      REAL(wp) ::   zaggtmp, zfact, zmax
58      CHARACTER (len=25) :: charout
59      !!---------------------------------------------------------------------
60      !
61      IF( ln_timing )   CALL timing_start('p4z_agg')
62      !
63      !  Exchange between organic matter compartments due to
64      !  coagulation/disaggregation
65      !  ---------------------------------------------------
66
67      ! PISCES part
68      IF( ln_p4z ) THEN
69         !
70         DO jk = 1, jpkm1
71            DO jj = 1, jpj
72               DO ji = 1, jpi
73                  !
74                  zfact = xstep * xdiss(ji,jj,jk)
75                  ! Part I : Coagulation dependent on turbulence
76                  ! The stickiness has been assumed to be 0.1
77                  zagg1 = 25.9  * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc)
78                  zagg2 = 4452. * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc)
79
80                  ! Part II : Differential settling
81                  ! Aggregation of small into large particles
82                  ! The stickiness has been assumed to be 0.1
83                  zagg3 =  47.1 * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc)
84                  zagg4 =  3.3  * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc)
85
86                  zagg   = zagg1 + zagg2 + zagg3 + zagg4
87                  zaggfe = zagg * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn )
88
89                  ! Aggregation of DOC to POC :
90                  ! 1st term is shear aggregation of DOC-DOC
91                  ! 2nd term is shear aggregation of DOC-POC
92                  ! 3rd term is differential settling of DOC-POC
93                  ! 1/3 of DOC is supposed to experience aggregation (HMW)
94                  zaggdoc  = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       &
95                  &            + 2.4 * xstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc)
96                  ! transfer of DOC to GOC :
97                  ! 1st term is shear aggregation
98                  ! 2nd term is differential settling
99                  ! 1/3 of DOC is supposed to experience aggregation (HMW)
100                  zaggdoc2 = ( 3.53E3 * zfact + 0.1 * xstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc)
101                  ! tranfer of DOC to POC due to brownian motion
102                  ! The temperature dependency has been omitted.
103                  zaggdoc3 =  114. * 0.3 * trb(ji,jj,jk,jpdoc) *xstep * 0.3 * trb(ji,jj,jk,jpdoc)
104
105                  !  Update the trends
106                  tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zagg + zaggdoc + zaggdoc3
107                  tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zagg + zaggdoc2
108                  tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zaggfe
109                  tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zaggfe
110                  tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc2 - zaggdoc3
111                  !
112                  conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zagg + zaggdoc + zaggdoc3
113                  prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zagg + zaggdoc2
114                  !
115               END DO
116            END DO
117         END DO
118      ELSE    ! ln_p5z
119        !
120        ! PISCES-QUOTA part
121         DO jk = 1, jpkm1
122            DO jj = 1, jpj
123               DO ji = 1, jpi
124                  !
125                  zfact = xstep * xdiss(ji,jj,jk)
126                  ! Part I : Coagulation dependent on turbulence
127                  ! The stickiness has been assumed to be 0.1
128                  zaggtmp = 25.9  * zfact * trb(ji,jj,jk,jppoc)
129                  zaggpoc1 = zaggtmp * trb(ji,jj,jk,jppoc)
130                  zaggtmp = 4452. * zfact * trb(ji,jj,jk,jpgoc)
131                  zaggpoc2 = zaggtmp * trb(ji,jj,jk,jppoc)
132
133                  ! Part II : Differential settling
134                  ! The stickiness has been assumed to be 0.1
135   
136                  !  Aggregation of small into large particles
137                  zaggtmp =  47.1 * xstep * trb(ji,jj,jk,jpgoc)
138                  zaggpoc3 = zaggtmp * trb(ji,jj,jk,jppoc)
139                  zaggtmp =  3.3  * xstep * trb(ji,jj,jk,jppoc)
140                  zaggpoc4 = zaggtmp * trb(ji,jj,jk,jppoc)
141
142                  zaggpoc   = zaggpoc1 + zaggpoc2 + zaggpoc3 + zaggpoc4
143                  zaggpon = zaggpoc * trb(ji,jj,jk,jppon) / ( trb(ji,jj,jk,jppoc) + rtrn)
144                  zaggpop = zaggpoc * trb(ji,jj,jk,jppop) / ( trb(ji,jj,jk,jppoc) + rtrn)
145                  zaggfe = zaggpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc)  + rtrn )
146
147                  ! Aggregation of DOC to POC :
148                  ! 1st term is shear aggregation of DOC-DOC
149                  ! 2nd term is shear aggregation of DOC-POC
150                  ! 3rd term is differential settling of DOC-POC
151                  ! 1/3 of DOC is supposed to experience aggregation (HMW)
152                  zaggtmp = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       &
153                  &            + 2.4 * xstep * trb(ji,jj,jk,jppoc) )
154                  zaggdoc  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc)
155                  zaggdon  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdon)
156                  zaggdop  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdop)
157
158                  ! transfer of DOC to GOC :
159                  ! 1st term is shear aggregation
160                  ! 2nd term is differential settling
161                  ! 1/3 of DOC is supposed to experience aggregation (HMW)
162                  zaggtmp = ( 3.53E3 * zfact + 0.1 * xstep ) * trb(ji,jj,jk,jpgoc)
163                  zaggdoc2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc)
164                  zaggdon2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdon)
165                  zaggdop2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdop)
166
167                  ! tranfer of DOC to POC due to brownian motion
168                  ! 1/3 of DOC is supposed to experience aggregation (HMW)
169                  zaggtmp = ( 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) * xstep
170                  zaggdoc3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc)
171                  zaggdon3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdon)
172                  zaggdop3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdop)
173
174                  !  Update the trends
175                  tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zaggpoc + zaggdoc + zaggdoc3
176                  tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zaggpon + zaggdon + zaggdon3
177                  tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zaggpop + zaggdop + zaggdop3
178                  tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zaggpoc + zaggdoc2
179                  tra(ji,jj,jk,jpgon) = tra(ji,jj,jk,jpgon) + zaggpon + zaggdon2
180                  tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) + zaggpop + zaggdop2
181                  tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zaggfe
182                  tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zaggfe
183                  tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc2 - zaggdoc3
184                  tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) - zaggdon - zaggdon2 - zaggdon3
185                  tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) - zaggdop - zaggdop2 - zaggdop3
186                  !
187                  conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zaggpoc + zaggdoc + zaggdoc3
188                  prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zaggpoc + zaggdoc2
189                  !
190               END DO
191            END DO
192         END DO
193         !
194      ENDIF
195      !
196      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
197         WRITE(charout, FMT="('agg')")
198         CALL prt_ctl_trc_info(charout)
199         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
200      ENDIF
201      !
202      IF( ln_timing )   CALL timing_stop('p4z_agg')
203      !
204   END SUBROUTINE p4z_agg
205
206   !!======================================================================
207END MODULE p4zagg
Note: See TracBrowser for help on using the repository browser.