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 branches/UKMO/r8395_cpl_tauwav/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z – NEMO

source: branches/UKMO/r8395_cpl_tauwav/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zagg.F90 @ 12286

Last change on this file since 12286 was 12286, checked in by jcastill, 4 years ago

Remove svn keywords

File size: 9.1 KB
Line 
1MODULE p4zagg
2   !!======================================================================
3   !!                         ***  MODULE p4zagg  ***
4   !! TOP :  PISCES  aggregation of particles
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) Change aggregation formula
9   !!             3.5  !  2012-07  (O. Aumont) Introduce potential time-splitting
10   !!             3.6  !  2015-05  (O. Aumont) PISCES quota
11   !!----------------------------------------------------------------------
12   !!----------------------------------------------------------------------
13   !!   p4z_agg       :  Compute aggregation of particles
14   !!----------------------------------------------------------------------
15   USE oce_trc         !  shared variables between ocean and passive tracers
16   USE trc             !  passive tracers common variables
17   USE sms_pisces      !  PISCES Source Minus Sink variables
18   USE prtctl_trc      !  print control for debugging
19
20   IMPLICIT NONE
21   PRIVATE
22
23   PUBLIC   p4z_agg         ! called in p4zbio.F90
24
25   !!----------------------------------------------------------------------
26   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
27   !! $Id$
28   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
29   !!----------------------------------------------------------------------
30CONTAINS
31
32   SUBROUTINE p4z_agg ( kt, knt )
33      !!---------------------------------------------------------------------
34      !!                     ***  ROUTINE p4z_agg  ***
35      !!
36      !! ** Purpose :   Compute aggregation of particles
37      !!
38      !! ** Method  : - ???
39      !!---------------------------------------------------------------------
40      INTEGER, INTENT(in) :: kt, knt
41      INTEGER  ::   ji, jj, jk
42      REAL(wp) ::   zagg, zagg1, zagg2, zagg3, zagg4
43      REAL(wp) ::   zaggpoc1, zaggpoc2, zaggpoc3, zaggpoc4
44      REAL(wp) ::   zaggpoc , zaggfe, zaggdoc, zaggdoc2, zaggdoc3
45      REAL(wp) ::   zaggpon , zaggdon, zaggdon2, zaggdon3
46      REAL(wp) ::   zaggpop, zaggdop, zaggdop2, zaggdop3
47      REAL(wp) ::   zaggtmp, zfact, zmax
48      CHARACTER (len=25) :: charout
49      !!---------------------------------------------------------------------
50      !
51      IF( nn_timing == 1 )  CALL timing_start('p4z_agg')
52
53      !
54      !  Exchange between organic matter compartments due to coagulation/disaggregation
55      !  ---------------------------------------------------
56      IF( ln_p4z ) THEN
57         !
58         DO jk = 1, jpkm1
59            DO jj = 1, jpj
60               DO ji = 1, jpi
61                  !
62                  zfact = xstep * xdiss(ji,jj,jk)
63                  !  Part I : Coagulation dependent on turbulence
64                  zagg1 = 25.9  * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc)
65                  zagg2 = 4452. * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc)
66
67                  ! Part II : Differential settling
68
69                  !  Aggregation of small into large particles
70                  zagg3 =  47.1 * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc)
71                  zagg4 =  3.3  * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc)
72
73                  zagg   = zagg1 + zagg2 + zagg3 + zagg4
74                  zaggfe = zagg * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn )
75
76                  ! Aggregation of DOC to POC :
77                  ! 1st term is shear aggregation of DOC-DOC
78                  ! 2nd term is shear aggregation of DOC-POC
79                  ! 3rd term is differential settling of DOC-POC
80                  zaggdoc  = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       &
81                  &            + 2.4 * xstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc)
82                  ! transfer of DOC to GOC :
83                  ! 1st term is shear aggregation
84                  ! 2nd term is differential settling
85                  zaggdoc2 = ( 3.53E3 * zfact + 0.1 * xstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc)
86                  ! tranfer of DOC to POC due to brownian motion
87                  zaggdoc3 =  114. * 0.3 * trb(ji,jj,jk,jpdoc) *xstep * 0.3 * trb(ji,jj,jk,jpdoc)
88
89                  !  Update the trends
90                  tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zagg + zaggdoc + zaggdoc3
91                  tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zagg + zaggdoc2
92                  tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zaggfe
93                  tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zaggfe
94                  tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc2 - zaggdoc3
95                  !
96                  conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zagg + zaggdoc + zaggdoc3
97                  prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zagg + zaggdoc2
98                  !
99               END DO
100            END DO
101         END DO
102      ELSE    ! ln_p5z
103        !
104         DO jk = 1, jpkm1
105            DO jj = 1, jpj
106               DO ji = 1, jpi
107                  !
108                  zfact = xstep * xdiss(ji,jj,jk)
109                  !  Part I : Coagulation dependent on turbulence
110                  zaggtmp = 25.9  * zfact * trb(ji,jj,jk,jppoc)
111                  zaggpoc1 = zaggtmp * trb(ji,jj,jk,jppoc)
112                  zaggtmp = 4452. * zfact * trb(ji,jj,jk,jpgoc)
113                  zaggpoc2 = zaggtmp * trb(ji,jj,jk,jppoc)
114
115                  ! Part II : Differential settling
116   
117                  !  Aggregation of small into large particles
118                  zaggtmp =  47.1 * xstep * trb(ji,jj,jk,jpgoc)
119                  zaggpoc3 = zaggtmp * trb(ji,jj,jk,jppoc)
120                  zaggtmp =  3.3  * xstep * trb(ji,jj,jk,jppoc)
121                  zaggpoc4 = zaggtmp * trb(ji,jj,jk,jppoc)
122
123                  zaggpoc   = zaggpoc1 + zaggpoc2 + zaggpoc3 + zaggpoc4
124                  zaggpon = zaggpoc * trb(ji,jj,jk,jppon) / ( trb(ji,jj,jk,jppoc) + rtrn)
125                  zaggpop = zaggpoc * trb(ji,jj,jk,jppop) / ( trb(ji,jj,jk,jppoc) + rtrn)
126                  zaggfe = zaggpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc)  + rtrn )
127
128                  ! Aggregation of DOC to POC :
129                  ! 1st term is shear aggregation of DOC-DOC
130                  ! 2nd term is shear aggregation of DOC-POC
131                  ! 3rd term is differential settling of DOC-POC
132                  zaggtmp = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       &
133                  &            + 2.4 * xstep * trb(ji,jj,jk,jppoc) )
134                  zaggdoc  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc)
135                  zaggdon  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdon)
136                  zaggdop  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdop)
137
138                  ! transfer of DOC to GOC :
139                  ! 1st term is shear aggregation
140                  ! 2nd term is differential settling
141                  zaggtmp = ( 3.53E3 * zfact + 0.1 * xstep ) * trb(ji,jj,jk,jpgoc)
142                  zaggdoc2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc)
143                  zaggdon2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdon)
144                  zaggdop2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdop)
145
146                  ! tranfer of DOC to POC due to brownian motion
147                  zaggtmp = ( 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) * xstep
148                  zaggdoc3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc)
149                  zaggdon3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdon)
150                  zaggdop3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdop)
151
152                  !  Update the trends
153                  tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zaggpoc + zaggdoc + zaggdoc3
154                  tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zaggpon + zaggdon + zaggdon3
155                  tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zaggpop + zaggdop + zaggdop3
156                  tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zaggpoc + zaggdoc2
157                  tra(ji,jj,jk,jpgon) = tra(ji,jj,jk,jpgon) + zaggpon + zaggdon2
158                  tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) + zaggpop + zaggdop2
159                  tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zaggfe
160                  tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zaggfe
161                  tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc2 - zaggdoc3
162                  tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) - zaggdon - zaggdon2 - zaggdon3
163                  tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) - zaggdop - zaggdop2 - zaggdop3
164                  !
165                  conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zaggpoc + zaggdoc + zaggdoc3
166                  prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zaggpoc + zaggdoc2
167                  !
168               END DO
169            END DO
170         END DO
171         !
172      ENDIF
173      !
174      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
175         WRITE(charout, FMT="('agg')")
176         CALL prt_ctl_trc_info(charout)
177         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
178      ENDIF
179      !
180      IF( nn_timing == 1 )  CALL timing_stop('p4z_agg')
181      !
182   END SUBROUTINE p4z_agg
183
184   !!======================================================================
185END MODULE p4zagg
Note: See TracBrowser for help on using the repository browser.