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

source: branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zagg.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

File size: 5.7 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#if defined key_pisces
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 p4zsink         !  PISCES sinking fluxes
19   USE prtctl_trc      !  print control for debugging
20   USE iom             !  I/O manager
21   USE lib_mpp
22
23   IMPLICIT NONE
24   PRIVATE
25
26   PUBLIC   p4z_agg         ! called in p4zbio.F90
27
28   !!* Substitution
29#  include "top_substitute.h90"
30   !!----------------------------------------------------------------------
31   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
32   !! $Id: p4zagg.F90 3160 2011-11-20 14:27:18Z cetlod $
33   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
34   !!----------------------------------------------------------------------
35CONTAINS
36
37   !!----------------------------------------------------------------------
38   !!   'standard parameterisation'                  ???
39   !!----------------------------------------------------------------------
40
41   SUBROUTINE p4z_agg ( kt, knt )
42      !!---------------------------------------------------------------------
43      !!                     ***  ROUTINE p4z_agg  ***
44      !!
45      !! ** Purpose :   Compute aggregation of particles
46      !!
47      !! ** Method  : - ???
48      !!---------------------------------------------------------------------
49      INTEGER, INTENT(in) :: kt, knt
50      INTEGER  ::   ji, jj, jk
51      REAL(wp) ::   zagg1, zagg2, zagg3, zagg4
52      REAL(wp) ::   zagg , zaggfe, zaggdoc, zaggdoc2, zaggdoc3
53      REAL(wp) ::   zfact, zstep
54      CHARACTER (len=25) :: charout
55      !!---------------------------------------------------------------------
56      !
57      IF( nn_timing == 1 )  CALL timing_start('p4z_agg')
58
59      !
60      !  Exchange between organic matter compartments due to coagulation/disaggregation
61      !  ---------------------------------------------------
62      DO jk = 1, jpkm1
63         DO jj = 1, jpj
64            DO ji = 1, jpi
65               !
66               zstep = xstep 
67               zfact = zstep * xdiss(ji,jj,jk)
68               !  Part I : Coagulation dependent on turbulence
69               zagg1 = 25.9  * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc)
70               zagg2 = 4452. * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc)
71
72               ! Part II : Differential settling
73
74               !  Aggregation of small into large particles
75               zagg3 =  47.1 * zstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc)
76               zagg4 =  3.3  * zstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc)
77
78               zagg   = zagg1 + zagg2 + zagg3 + zagg4
79               zaggfe = zagg * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn )
80
81               ! Aggregation of DOC to POC :
82               ! 1st term is shear aggregation of DOC-DOC
83               ! 2nd term is shear aggregation of DOC-POC
84               ! 3rd term is differential settling of DOC-POC
85               zaggdoc  = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       &
86               &            + 2.4 * zstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc)
87               ! transfer of DOC to GOC :
88               ! 1st term is shear aggregation
89               ! 2nd term is differential settling
90               zaggdoc2 = ( 3.53E3 * zfact + 0.1 * zstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc)
91               ! tranfer of DOC to POC due to brownian motion
92               zaggdoc3 =  114. * 0.3 * trb(ji,jj,jk,jpdoc) *zstep * 0.3 * trb(ji,jj,jk,jpdoc)
93
94               !  Update the trends
95               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zagg + zaggdoc + zaggdoc3
96               tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zagg + zaggdoc2
97               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zaggfe
98               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zaggfe
99               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc2 - zaggdoc3
100               !
101               conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zagg + zaggdoc + zaggdoc3
102               prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zagg + zaggdoc2
103               !
104            END DO
105         END DO
106      END DO
107      !
108      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
109         WRITE(charout, FMT="('agg')")
110         CALL prt_ctl_trc_info(charout)
111         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
112      ENDIF
113      !
114      IF( nn_timing == 1 )  CALL timing_stop('p4z_agg')
115      !
116   END SUBROUTINE p4z_agg
117
118#else
119   !!======================================================================
120   !!  Dummy module :                                   No PISCES bio-model
121   !!======================================================================
122CONTAINS
123   SUBROUTINE p4z_agg                    ! Empty routine
124   END SUBROUTINE p4z_agg
125#endif 
126
127   !!======================================================================
128END MODULE p4zagg
Note: See TracBrowser for help on using the repository browser.