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/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/p4zagg.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

File size: 5.0 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   !!----------------------------------------------------------------------
11   !!----------------------------------------------------------------------
12   !!   p4z_agg       :  Compute aggregation of particles
13   !!----------------------------------------------------------------------
14   USE oce_trc         !  shared variables between ocean and passive tracers
15   USE trc             !  passive tracers common variables
16   USE sms_pisces      !  PISCES Source Minus Sink variables
17   USE prtctl_trc      !  print control for debugging
18
19   IMPLICIT NONE
20   PRIVATE
21
22   PUBLIC   p4z_agg         ! called in p4zbio.F90
23
24   !!----------------------------------------------------------------------
25   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
26   !! $Id: p4zagg.F90 3160 2011-11-20 14:27:18Z cetlod $
27   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
28   !!----------------------------------------------------------------------
29CONTAINS
30
31   SUBROUTINE p4z_agg ( kt, knt )
32      !!---------------------------------------------------------------------
33      !!                     ***  ROUTINE p4z_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) ::   zagg1, zagg2, zagg3, zagg4
42      REAL(wp) ::   zagg , zaggfe, zaggdoc, zaggdoc2, zaggdoc3
43      REAL(wp) ::   zfact
44      CHARACTER (len=25) :: charout
45      !!---------------------------------------------------------------------
46      !
47      IF( nn_timing == 1 )  CALL timing_start('p4z_agg')
48
49      !
50      !  Exchange between organic matter compartments due to coagulation/disaggregation
51      !  ---------------------------------------------------
52      DO jk = 1, jpkm1
53         DO jj = 1, jpj
54            DO ji = 1, jpi
55               !
56               zfact = xstep * xdiss(ji,jj,jk)
57               !  Part I : Coagulation dependent on turbulence
58               zagg1 = 25.9  * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc)
59               zagg2 = 4452. * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc)
60
61               ! Part II : Differential settling
62
63               !  Aggregation of small into large particles
64               zagg3 =  47.1 * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc)
65               zagg4 =  3.3  * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc)
66
67               zagg   = zagg1 + zagg2 + zagg3 + zagg4
68               zaggfe = zagg * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn )
69
70               ! Aggregation of DOC to POC :
71               ! 1st term is shear aggregation of DOC-DOC
72               ! 2nd term is shear aggregation of DOC-POC
73               ! 3rd term is differential settling of DOC-POC
74               zaggdoc  = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       &
75               &            + 2.4 * xstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc)
76               ! transfer of DOC to GOC :
77               ! 1st term is shear aggregation
78               ! 2nd term is differential settling
79               zaggdoc2 = ( 3.53E3 * zfact + 0.1 * xstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc)
80               ! tranfer of DOC to POC due to brownian motion
81               zaggdoc3 =  114. * 0.3 * trb(ji,jj,jk,jpdoc) *xstep * 0.3 * trb(ji,jj,jk,jpdoc)
82
83               !  Update the trends
84               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zagg + zaggdoc + zaggdoc3
85               tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zagg + zaggdoc2
86               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zaggfe
87               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zaggfe
88               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc2 - zaggdoc3
89               !
90               conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zagg + zaggdoc + zaggdoc3
91               prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zagg + zaggdoc2
92               !
93            END DO
94         END DO
95      END DO
96      !
97      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
98         WRITE(charout, FMT="('agg')")
99         CALL prt_ctl_trc_info(charout)
100         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
101      ENDIF
102      !
103      IF( nn_timing == 1 )  CALL timing_stop('p4z_agg')
104      !
105   END SUBROUTINE p4z_agg
106
107   !!======================================================================
108END MODULE p4zagg
Note: See TracBrowser for help on using the repository browser.