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.
trcexp.F90 in trunk/NEMO/TOP_SRC/LOBSTER – NEMO

source: trunk/NEMO/TOP_SRC/LOBSTER/trcexp.F90 @ 1194

Last change on this file since 1194 was 1194, checked in by cetlod, 16 years ago

Correction of LOBSTER modules to ensure reproductibility for GYRE_LOBSTER, see ticket:253

  • Property svn:keywords set to Id
File size: 7.6 KB
Line 
1MODULE trcexp
2   !!======================================================================
3   !!                         ***  MODULE p4sed  ***
4   !! TOP :   PISCES Compute loss of organic matter in the sediments
5   !!======================================================================
6   !! History :    -   !  1999    (O. Aumont, C. Le Quere)  original code
7   !!              -   !  2001-05 (O. Aumont, E. Kestenare) add sediment computations
8   !!             1.0  !  2005-06 (A.-S. Kremeur) new temporal integration for sedpoc
9   !!             2.0  !  2007-12  (C. Deltel, G. Madec)  F90
10   !!----------------------------------------------------------------------
11#if defined key_lobster
12   !!----------------------------------------------------------------------
13   !!   'key_lobster'                                     LOBSTER bio-model
14   !!----------------------------------------------------------------------
15   !!   trc_exp        :  Compute loss of organic matter in the sediments
16   !!----------------------------------------------------------------------
17   USE oce_trc         !
18   USE sms_lobster
19   USE lbclnk
20   USE trc
21   USE trctrp_lec
22   USE prtctl_trc      ! Print control for debbuging
23   USE trdmld_trc
24   USE trdmld_trc_oce
25
26   IMPLICIT NONE
27   PRIVATE
28
29   PUBLIC   trc_exp    ! called in p4zprg.F90
30
31   !!* Substitution
32#  include "domzgr_substitute.h90"
33   !!----------------------------------------------------------------------
34   !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)
35   !! $Id$
36   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
37   !!----------------------------------------------------------------------
38
39CONTAINS
40
41   SUBROUTINE trc_exp( kt )
42      !!---------------------------------------------------------------------
43      !!                     ***  ROUTINE trc_exp  ***
44      !!
45      !! ** Purpose :   MODELS EXPORT OF BIOGENIC MATTER (POC ''SOFT
46      !!              TISSUE'') AND ITS DISTRIBUTION IN WATER COLUMN
47      !!
48      !! ** Method  : - IN THE SURFACE LAYER POC IS PRODUCED ACCORDING TO
49      !!              NURTRIENTS AVAILABLE AND GROWTH CONDITIONS. NUTRIENT UPTAKE
50      !!              KINETICS FOLLOW MICHAELIS-MENTON FORMULATION.
51      !!              THE TOTAL PARTICLE AMOUNT PRODUCED, IS DISTRIBUTED IN THE WATER
52      !!              COLUMN BELOW THE SURFACE LAYER.
53      !!---------------------------------------------------------------------
54      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index     
55      !!
56      INTEGER  ::   ji, jj, jk, jl
57      REAL(wp) ::   zgeolpoc, zfact
58      INTEGER , DIMENSION(jpi,jpj) ::   ikbot
59      REAL(wp), DIMENSION(jpi,jpj) ::   zwork
60      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   ztrbio
61      CHARACTER (len=25) :: charout
62      !!---------------------------------------------------------------------
63
64      IF( kt == nit000 ) THEN
65         IF(lwp) WRITE(numout,*)
66         IF(lwp) WRITE(numout,*) ' trc_exp: LOBSTER export'
67         IF(lwp) WRITE(numout,*) ' ~~~~~~~'
68      ENDIF
69
70      ! VERTICAL DISTRIBUTION OF NEWLY PRODUCED BIOGENIC
71      ! POC IN THE WATER COLUMN
72      ! (PARTS OF NEWLY FORMED MATTER REMAINING IN THE DIFFERENT
73      ! LAYERS IS DETERMINED BY DMIN3 DEFINED IN sms_lobster.F90
74      ! ----------------------------------------------------------------------
75
76      IF( l_trdtrc )THEN
77         ALLOCATE( ztrbio(jpi,jpj,jpk) )
78         ztrbio(:,:,:) = tra(:,:,:,jpno3)
79      ENDIF
80
81      DO jk = 1, jpkm1
82         DO jj = 2, jpjm1
83            DO ji = 2, jpim1
84               tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3)   &
85     &                             + (1./fse3t(ji,jj,jk)) * dmin3(ji,jj,jk) * fbod(ji,jj)
86            END DO
87         END DO
88      END DO
89
90!     Find the last level of the water column
91!     Compute fluxes due to sinking particles (slow)
92   
93      ikbot(:,:) = jpk
94      zwork(:,:) = 0.e0
95
96!!gm ikbot already exist in opa...
97      DO jk = 1, jpkm1
98         DO jj = 2, jpjm1
99            DO ji = 2, jpim1
100               IF( tmask(ji,jj,jk) == 1 .AND.  tmask(ji,jj,jk+1) == 0 ) THEN
101                  ikbot(ji,jj) = jk
102                  zwork(ji,jj) = vsed * trn(ji,jj,jk,jpdet)
103               ENDIF
104            END DO
105         END DO
106      END DO
107
108      zgeolpoc = 0.e0         !     Initialization
109
110      ! Release of nutrients from the "simple" sediment
111      DO jj = 2, jpjm1
112         DO ji = 2, jpim1
113            tra(ji,jj,ikbot(ji,jj),jpno3) = tra(ji,jj,ikbot(ji,jj),jpno3)   &
114               &                          + sedlam * sedpocn(ji,jj) / fse3t(ji,jj,ikbot(ji,jj))
115
116            !     Deposition of organic matter in the sediment
117            zgeolpoc = zgeolpoc + sedlostpoc * sedpocn(ji,jj) * e1t(ji,jj) * e2t(ji,jj)
118
119!!gm factorisationof rdt just bellow...
120            sedpoca(ji,jj) = zwork(ji,jj) * rdt + dminl(ji,jj) * fbod(ji,jj) * rdt   &
121               &           - sedlam * sedpocn(ji,jj) * rdt - sedlostpoc * sedpocn(ji,jj) * rdt
122
123         END DO
124      END DO
125
126      DO jj = 2,jpjm1
127         DO ji = 2,jpim1
128            tra(ji,jj,1,jpno3) = tra(ji,jj,1,jpno3) + zgeolpoc * cmask(ji,jj) / areacot / fse3t(ji,jj,1)
129         END DO
130      END DO
131
132      CALL lbc_lnk( sedpocn, 'T', 1. )
133 
134      ! Oa & Ek: diagnostics depending on jpdia2d !          left as example
135# if defined key_trc_diaadd
136      trc2d(:,:,19) = sedpocn(:,:)
137# endif
138
139      ! Leap-frog scheme (only in explicit case, otherwise the
140      ! ----------------  time stepping is already done in trczdf)
141      IF( l_trczdf_exp .AND. (ln_trcadv_cen2 .OR. ln_trcadv_tvd) ) THEN
142         zfact = 2. * rdttra(jk) * FLOAT( ndttrc ) 
143         IF( neuler == 0 .AND. kt == nittrc000 )   zfact = rdttra(jk) * FLOAT(ndttrc) 
144         sedpoca(:,:) =  sedpocb(:,:) + zfact * sedpoca(:,:) 
145      ENDIF
146
147     
148      ! Time filter and swap of arrays
149      ! ------------------------------
150      IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd  ) THEN         ! centred or tvd scheme
151         IF( neuler == 0 .AND. kt == nittrc000 ) THEN
152            DO jj = 1, jpj
153               DO ji = 1, jpi
154                  sedpocb(ji,jj) = sedpocn(ji,jj)
155                  sedpocn(ji,jj) = sedpoca(ji,jj)
156                  sedpoca(ji,jj) = 0.e0
157               END DO
158            END DO
159         ELSE
160            DO jj = 1, jpj
161               DO ji = 1, jpi
162                  sedpocb(ji,jj) = atfp  * ( sedpocb(ji,jj) + sedpoca(ji,jj) )    &
163                     &           + atfp1 *   sedpocn(ji,jj)
164                  sedpocn(ji,jj) = sedpoca(ji,jj)
165                  sedpoca(ji,jj) = 0.e0
166               END DO
167            END DO
168         ENDIF
169      ELSE                                                   !  case of smolar scheme or muscl
170         sedpocb(:,:) = sedpoca(:,:)
171         sedpocn(:,:) = sedpoca(:,:)
172         sedpoca(:,:) = 0.e0
173      ENDIF
174      !
175      IF( l_trdtrc ) THEN
176         ztrbio(:,:,:) = tra(:,:,:,jpno3) - ztrbio(:,:,:)
177         jl = 17
178         CALL trd_mod_trc( ztrbio, jl, kt )   ! handle the trend
179      ENDIF
180
181      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
182         WRITE(charout, FMT="('exp')")
183         CALL prt_ctl_trc_info(charout)
184         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
185      ENDIF
186
187   END SUBROUTINE trc_exp
188
189#else
190   !!======================================================================
191   !!  Dummy module :                                   No PISCES bio-model
192   !!======================================================================
193CONTAINS
194   SUBROUTINE trc_exp( kt )                   ! Empty routine
195      INTEGER, INTENT( in ) ::   kt
196      WRITE(*,*) 'trc_exp: You should not have seen this print! error?', kt
197   END SUBROUTINE trc_exp
198#endif 
199
200   !!======================================================================
201END MODULE  trcexp
Note: See TracBrowser for help on using the repository browser.