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_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/P4Z – NEMO

source: NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/P4Z/p4zagg.F90 @ 10975

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

2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : Finish converting all TOP routines and knock-on effects of these conversions. Fully SETTE tested (SETTE tests 1-6 and 9). This completes the first stage conversion of TRA and TOP but need to revisit and pass ts and tr arrays through the argument lists where appropriate.

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