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 @ 12538

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

Comments in routines have been revised and significantly augmented

  • Property svn:keywords set to Id
File size: 10.3 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                  zaggdoc3 =  114. * 0.3 * trb(ji,jj,jk,jpdoc) *xstep * 0.3 * trb(ji,jj,jk,jpdoc)
103
104                  !  Update the trends
105                  tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zagg + zaggdoc + zaggdoc3
106                  tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zagg + zaggdoc2
107                  tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zaggfe
108                  tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zaggfe
109                  tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc2 - zaggdoc3
110                  !
111                  conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zagg + zaggdoc + zaggdoc3
112                  prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zagg + zaggdoc2
113                  !
114               END DO
115            END DO
116         END DO
117      ELSE    ! ln_p5z
118        !
119        ! PISCES-QUOTA part
120         DO jk = 1, jpkm1
121            DO jj = 1, jpj
122               DO ji = 1, jpi
123                  !
124                  zfact = xstep * xdiss(ji,jj,jk)
125                  !  Part I : Coagulation dependent on turbulence
126                  ! The stickiness has been assumed to be 0.1
127                  zaggtmp = 25.9  * zfact * trb(ji,jj,jk,jppoc)
128                  zaggpoc1 = zaggtmp * trb(ji,jj,jk,jppoc)
129                  zaggtmp = 4452. * zfact * trb(ji,jj,jk,jpgoc)
130                  zaggpoc2 = zaggtmp * trb(ji,jj,jk,jppoc)
131
132                  ! Part II : Differential settling
133                  ! The stickiness has been assumed to be 0.1
134   
135                  !  Aggregation of small into large particles
136                  zaggtmp =  47.1 * xstep * trb(ji,jj,jk,jpgoc)
137                  zaggpoc3 = zaggtmp * trb(ji,jj,jk,jppoc)
138                  zaggtmp =  3.3  * xstep * trb(ji,jj,jk,jppoc)
139                  zaggpoc4 = zaggtmp * trb(ji,jj,jk,jppoc)
140
141                  zaggpoc   = zaggpoc1 + zaggpoc2 + zaggpoc3 + zaggpoc4
142                  zaggpon = zaggpoc * trb(ji,jj,jk,jppon) / ( trb(ji,jj,jk,jppoc) + rtrn)
143                  zaggpop = zaggpoc * trb(ji,jj,jk,jppop) / ( trb(ji,jj,jk,jppoc) + rtrn)
144                  zaggfe = zaggpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc)  + rtrn )
145
146                  ! Aggregation of DOC to POC :
147                  ! 1st term is shear aggregation of DOC-DOC
148                  ! 2nd term is shear aggregation of DOC-POC
149                  ! 3rd term is differential settling of DOC-POC
150                  ! 1/3 of DOC is supposed to experience aggregation (HMW)
151                  zaggtmp = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       &
152                  &            + 2.4 * xstep * trb(ji,jj,jk,jppoc) )
153                  zaggdoc  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc)
154                  zaggdon  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdon)
155                  zaggdop  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdop)
156
157                  ! transfer of DOC to GOC :
158                  ! 1st term is shear aggregation
159                  ! 2nd term is differential settling
160                  ! 1/3 of DOC is supposed to experience aggregation (HMW)
161                  zaggtmp = ( 3.53E3 * zfact + 0.1 * xstep ) * trb(ji,jj,jk,jpgoc)
162                  zaggdoc2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc)
163                  zaggdon2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdon)
164                  zaggdop2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdop)
165
166                  ! tranfer of DOC to POC due to brownian motion
167                  ! 1/3 of DOC is supposed to experience aggregation (HMW)
168                  zaggtmp = ( 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) * xstep
169                  zaggdoc3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc)
170                  zaggdon3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdon)
171                  zaggdop3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdop)
172
173                  !  Update the trends
174                  tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zaggpoc + zaggdoc + zaggdoc3
175                  tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zaggpon + zaggdon + zaggdon3
176                  tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zaggpop + zaggdop + zaggdop3
177                  tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zaggpoc + zaggdoc2
178                  tra(ji,jj,jk,jpgon) = tra(ji,jj,jk,jpgon) + zaggpon + zaggdon2
179                  tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) + zaggpop + zaggdop2
180                  tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zaggfe
181                  tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zaggfe
182                  tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc2 - zaggdoc3
183                  tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) - zaggdon - zaggdon2 - zaggdon3
184                  tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) - zaggdop - zaggdop2 - zaggdop3
185                  !
186                  conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zaggpoc + zaggdoc + zaggdoc3
187                  prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zaggpoc + zaggdoc2
188                  !
189               END DO
190            END DO
191         END DO
192         !
193      ENDIF
194      !
195      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
196         WRITE(charout, FMT="('agg')")
197         CALL prt_ctl_trc_info(charout)
198         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
199      ENDIF
200      !
201      IF( ln_timing )   CALL timing_stop('p4z_agg')
202      !
203   END SUBROUTINE p4z_agg
204
205   !!======================================================================
206END MODULE p4zagg
Note: See TracBrowser for help on using the repository browser.