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/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z – NEMO

source: branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zagg.F90 @ 8003

Last change on this file since 8003 was 8003, checked in by aumont, 7 years ago

modification in the code to remove unnecessary parts such as kriest and non iomput options

  • Property svn:executable set to *
File size: 7.2 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#if defined key_pisces_quota
13   !!----------------------------------------------------------------------
14   !!   p5z_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 p5zsink         !  PISCES sinking of particles
20   USE prtctl_trc      !  print control for debugging
21   USE iom             !  I/O manager
22   USE lib_mpp
23
24   IMPLICIT NONE
25   PRIVATE
26
27   PUBLIC   p5z_agg         ! called in p5zbio.F90
28
29   !!* Substitution
30#  include "top_substitute.h90"
31   !!----------------------------------------------------------------------
32   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
33   !! $Id: p4zsink.F90 3160 2011-11-20 14:27:18Z cetlod $
34   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
35   !!----------------------------------------------------------------------
36CONTAINS
37
38   !!----------------------------------------------------------------------
39   !!   'standard particles parameterisation'                  ???
40   !!----------------------------------------------------------------------
41
42   SUBROUTINE p5z_agg ( kt, knt )
43      !!---------------------------------------------------------------------
44      !!                     ***  ROUTINE p5z_agg  ***
45      !!
46      !! ** Purpose :   Compute aggregation of particles
47      !!
48      !! ** Method  : - ???
49      !!---------------------------------------------------------------------
50      INTEGER, INTENT(in) :: kt, knt
51      INTEGER  ::   ji, jj, jk
52      REAL(wp) ::   zaggpoc1, zaggpoc2, zaggpoc3, zaggpoc4
53      REAL(wp) ::   zaggpoc , zaggfe, zaggdoc, zaggdoc2, zaggdoc3
54      REAL(wp) ::   zaggpon , zaggdon, zaggdon2, zaggdon3
55      REAL(wp) ::   zaggpop, zaggdop, zaggdop2, zaggdop3
56      REAL(wp) ::   zaggtmp, zfact, zmax, zstep
57      CHARACTER (len=25) :: charout
58      !!---------------------------------------------------------------------
59      !
60      IF( nn_timing == 1 )  CALL timing_start('p5z_agg')
61      !
62      !  Exchange between organic matter compartments due to coagulation/disaggregation
63      !  ---------------------------------------------------
64      DO jk = 1, jpkm1
65         DO jj = 1, jpj
66            DO ji = 1, jpi
67               !
68               zstep = xstep 
69               zfact = zstep * xdiss(ji,jj,jk)
70               !  Part I : Coagulation dependent on turbulence
71               zaggtmp = 25.9  * zfact * trb(ji,jj,jk,jppoc)
72               zaggpoc1 = zaggtmp * trb(ji,jj,jk,jppoc)
73               zaggtmp = 4452. * zfact * trb(ji,jj,jk,jpgoc)
74               zaggpoc2 = zaggtmp * trb(ji,jj,jk,jppoc)
75
76               ! Part II : Differential settling
77
78               !  Aggregation of small into large particles
79               zaggtmp =  47.1 * zstep * trb(ji,jj,jk,jpgoc)
80               zaggpoc3 = zaggtmp * trb(ji,jj,jk,jppoc)
81               zaggtmp =  3.3  * zstep * trb(ji,jj,jk,jppoc)
82               zaggpoc4 = zaggtmp * trb(ji,jj,jk,jppoc)
83
84               zaggpoc   = zaggpoc1 + zaggpoc2 + zaggpoc3 + zaggpoc4
85               zaggpon = zaggpoc * trb(ji,jj,jk,jppon) / ( trb(ji,jj,jk,jppoc) + rtrn)
86               zaggpop = zaggpoc * trb(ji,jj,jk,jppop) / ( trb(ji,jj,jk,jppoc) + rtrn)
87               zaggfe = zaggpoc * 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               zaggtmp = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       &
94               &            + 2.4 * zstep * trb(ji,jj,jk,jppoc) )
95               zaggdoc  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc)
96               zaggdon  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdon)
97               zaggdop  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdop)
98
99               ! transfer of DOC to GOC :
100               ! 1st term is shear aggregation
101               ! 2nd term is differential settling
102               zaggtmp = ( 3.53E3 * zfact + 0.1 * zstep ) * trb(ji,jj,jk,jpgoc)
103               zaggdoc2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc)
104               zaggdon2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdon)
105               zaggdop2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdop)
106
107               ! tranfer of DOC to POC due to brownian motion
108               zaggtmp = ( 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) *zstep
109               zaggdoc3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc)
110               zaggdon3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdon)
111               zaggdop3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdop)
112
113               !  Update the trends
114               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zaggpoc + zaggdoc + zaggdoc3
115               tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zaggpon + zaggdon + zaggdon3
116               tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zaggpop + zaggdop + zaggdop3
117               tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zaggpoc + zaggdoc2
118               tra(ji,jj,jk,jpgon) = tra(ji,jj,jk,jpgon) + zaggpon + zaggdon2
119               tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) + zaggpop + zaggdop2
120               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zaggfe
121               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zaggfe
122               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc2 - zaggdoc3
123               tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) - zaggdon - zaggdon2 - zaggdon3
124               tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) - zaggdop - zaggdop2 - zaggdop3
125               !
126               conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zaggpoc + zaggdoc + zaggdoc3
127               prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zaggpoc + zaggdoc2
128               !
129            END DO
130         END DO
131      END DO
132      !
133      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
134         WRITE(charout, FMT="('agg')")
135         CALL prt_ctl_trc_info(charout)
136         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
137      ENDIF
138      !
139      IF( nn_timing == 1 )  CALL timing_stop('p5z_agg')
140      !
141   END SUBROUTINE p5z_agg
142
143#else
144   !!======================================================================
145   !!  Dummy module :                                   No PISCES bio-model
146   !!======================================================================
147CONTAINS
148   SUBROUTINE p5z_agg                    ! Empty routine
149   END SUBROUTINE p5z_agg
150#endif 
151
152   !!======================================================================
153END MODULE  p5zagg
Note: See TracBrowser for help on using the repository browser.