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.
p5zagg.F90 in branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z – NEMO

source: branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zagg.F90 @ 7162

Last change on this file since 7162 was 7162, checked in by cetlod, 7 years ago

new top interface : Add PISCES quota model

  • Property svn:executable set to *
File size: 6.4 KB
Line 
1MODULE p5zagg
2   !!======================================================================
3   !!                         ***  MODULE p5zagg  ***
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   !!   p5z_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   p5z_agg         ! called in p5zbio.F90
24
25CONTAINS
26
27   !!----------------------------------------------------------------------
28   !!   'standard particles parameterisation'                  ???
29   !!----------------------------------------------------------------------
30
31   SUBROUTINE p5z_agg ( kt, knt )
32      !!---------------------------------------------------------------------
33      !!                     ***  ROUTINE p5z_agg  ***
34      !!
35      !! ** Purpose :   Compute aggregation of particles
36      !!
37      !! ** Method  : - ???
38      !!---------------------------------------------------------------------
39      INTEGER, INTENT(in) :: kt, knt
40      INTEGER  ::   ji, jj, jk
41      REAL(wp) ::   zaggpoc1, zaggpoc2, zaggpoc3, zaggpoc4
42      REAL(wp) ::   zaggpoc , zaggfe, zaggdoc, zaggdoc2, zaggdoc3
43      REAL(wp) ::   zaggpon , zaggdon, zaggdon2, zaggdon3
44      REAL(wp) ::   zaggpop, zaggdop, zaggdop2, zaggdop3
45      REAL(wp) ::   zaggtmp, zfact, zmax
46      CHARACTER (len=25) :: charout
47      !!---------------------------------------------------------------------
48      !
49      IF( nn_timing == 1 )  CALL timing_start('p5z_agg')
50      !
51      !  Exchange between organic matter compartments due to coagulation/disaggregation
52      !  ---------------------------------------------------
53      DO jk = 1, jpkm1
54         DO jj = 1, jpj
55            DO ji = 1, jpi
56               !
57               zfact = xstep * xdiss(ji,jj,jk)
58               !  Part I : Coagulation dependent on turbulence
59               zaggtmp = 25.9  * zfact * trb(ji,jj,jk,jppoc)
60               zaggpoc1 = zaggtmp * trb(ji,jj,jk,jppoc)
61               zaggtmp = 4452. * zfact * trb(ji,jj,jk,jpgoc)
62               zaggpoc2 = zaggtmp * trb(ji,jj,jk,jppoc)
63
64               ! Part II : Differential settling
65
66               !  Aggregation of small into large particles
67               zaggtmp =  47.1 * xstep * trb(ji,jj,jk,jpgoc)
68               zaggpoc3 = zaggtmp * trb(ji,jj,jk,jppoc)
69               zaggtmp =  3.3  * xstep * trb(ji,jj,jk,jppoc)
70               zaggpoc4 = zaggtmp * trb(ji,jj,jk,jppoc)
71
72               zaggpoc   = zaggpoc1 + zaggpoc2 + zaggpoc3 + zaggpoc4
73               zaggpon = zaggpoc * trb(ji,jj,jk,jppon) / ( trb(ji,jj,jk,jppoc) + rtrn)
74               zaggpop = zaggpoc * trb(ji,jj,jk,jppop) / ( trb(ji,jj,jk,jppoc) + rtrn)
75               zaggfe = zaggpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc)  + rtrn )
76
77               ! Aggregation of DOC to POC :
78               ! 1st term is shear aggregation of DOC-DOC
79               ! 2nd term is shear aggregation of DOC-POC
80               ! 3rd term is differential settling of DOC-POC
81               zaggtmp = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       &
82               &            + 2.4 * xstep * trb(ji,jj,jk,jppoc) )
83               zaggdoc  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc)
84               zaggdon  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdon)
85               zaggdop  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdop)
86
87               ! transfer of DOC to GOC :
88               ! 1st term is shear aggregation
89               ! 2nd term is differential settling
90               zaggtmp = ( 3.53E3 * zfact + 0.1 * xstep ) * trb(ji,jj,jk,jpgoc)
91               zaggdoc2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc)
92               zaggdon2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdon)
93               zaggdop2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdop)
94
95               ! tranfer of DOC to POC due to brownian motion
96               zaggtmp = ( 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) * xstep
97               zaggdoc3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc)
98               zaggdon3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdon)
99               zaggdop3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdop)
100
101               !  Update the trends
102               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zaggpoc + zaggdoc + zaggdoc3
103               tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zaggpon + zaggdon + zaggdon3
104               tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zaggpop + zaggdop + zaggdop3
105               tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zaggpoc + zaggdoc2
106               tra(ji,jj,jk,jpgon) = tra(ji,jj,jk,jpgon) + zaggpon + zaggdon2
107               tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) + zaggpop + zaggdop2
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               tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) - zaggdon - zaggdon2 - zaggdon3
112               tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) - zaggdop - zaggdop2 - zaggdop3
113               !
114               conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zaggpoc + zaggdoc + zaggdoc3
115               prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zaggpoc + zaggdoc2
116               !
117            END DO
118         END DO
119      END DO
120      !
121      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
122         WRITE(charout, FMT="('agg')")
123         CALL prt_ctl_trc_info(charout)
124         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
125      ENDIF
126      !
127      IF( nn_timing == 1 )  CALL timing_stop('p5z_agg')
128      !
129   END SUBROUTINE p5z_agg
130
131
132   !!======================================================================
133END MODULE  p5zagg
Note: See TracBrowser for help on using the repository browser.