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 branches/dev_001_GM/NEMO/TOP_SRC/LOBSTER – NEMO

source: branches/dev_001_GM/NEMO/TOP_SRC/LOBSTER/trcexp.F90 @ 777

Last change on this file since 777 was 777, checked in by gm, 16 years ago

dev_001_GM - LOBSTER in F90 encapsulation of LOBSTER routines in module - compilation OK

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.9 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 trp_trc
19   USE sms
20   USE lbclnk
21   USE trc
22   USE trctrp_lec
23
24   IMPLICIT NONE
25   PRIVATE
26
27   PUBLIC   trc_exp    ! called in p4zprg.F90
28
29   !!* Substitution
30#  include "domzgr_substitute.h90"
31   !!----------------------------------------------------------------------
32   !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)
33   !! $Id:$
34   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
35   !!----------------------------------------------------------------------
36
37CONTAINS
38
39   SUBROUTINE trc_exp( kt )
40      !!---------------------------------------------------------------------
41      !!                     ***  ROUTINE trc_exp  ***
42      !!
43      !! ** Purpose :   MODELS EXPORT OF BIOGENIC MATTER (POC ''SOFT
44      !!              TISSUE'') AND ITS DISTRIBUTION IN WATER COLUMN
45      !!
46      !! ** Method  : - IN THE SURFACE LAYER POC IS PRODUCED ACCORDING TO
47      !!              NURTRIENTS AVAILABLE AND GROWTH CONDITIONS. NUTRIENT UPTAKE
48      !!              KINETICS FOLLOW MICHAELIS-MENTON FORMULATION.
49      !!              THE TOTAL PARTICLE AMOUNT PRODUCED, IS DISTRIBUTED IN THE WATER
50      !!              COLUMN BELOW THE SURFACE LAYER.
51      !!---------------------------------------------------------------------
52      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index     
53      !!
54      INTEGER  ::   ji, jj, jk
55      REAL(wp) ::   zgeolpoc, zfact
56      INTEGER , DIMENSION(jpi,jpj) ::   ikbot
57      REAL(wp), DIMENSION(jpi,jpj) ::   zwork
58      !!---------------------------------------------------------------------
59
60      IF( kt == nit000 ) THEN
61         IF(lwp) WRITE(numout,*)
62         IF(lwp) WRITE(numout,*) ' trc_exp: LOBSTER export'
63         IF(lwp) WRITE(numout,*) ' ~~~~~~~'
64      ENDIF
65
66! VERTICAL DISTRIBUTION OF NEWLY PRODUCED BIOGENIC
67! POC IN THE WATER COLUMN
68! (PARTS OF NEWLY FORMED MATTER REMAINING IN THE DIFFERENT
69! LAYERS IS DETERMINED BY DMIN3 DEFINED IN common.passivetrc.*.h
70! ----------------------------------------------------------------------
71
72      DO jk = 1, jpkm1
73         DO jj = 2, jpjm1
74            DO ji = 2, jpim1
75               tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3)   &
76     &                             + (1./fse3t(ji,jj,jk)) * dmin3(ji,jj,jk) * fbod(ji,jj)
77            END DO
78         END DO
79      END DO
80
81!     Find the last level of the water column
82!     Compute fluxes due to sinking particles (slow)
83   
84      ikbot(:,:) = jpk
85      zwork(:,:) = 0.e0
86
87!!gm ikbot already exist in opa...
88      DO jk = 1, jpkm1
89         DO jj = 2, jpjm1
90            DO ji = 2, jpim1
91               IF( tmask(ji,jj,jk) == 1 .AND.  tmask(ji,jj,jk+1) == 0 ) THEN
92                  ikbot(ji,jj) = jk
93                  zwork(ji,jj) = vsed * trn(ji,jj,jk,jpdet)
94               ENDIF
95            END DO
96         END DO
97      END DO
98
99      zgeolpoc = 0.e0         !     Initialization
100
101      ! Release of nutrients from the "simple" sediment
102      DO jj = 2, jpjm1
103         DO ji = 2, jpim1
104            tra(ji,jj,ikbot(ji,jj),jpno3) = tra(ji,jj,ikbot(ji,jj),jpno3)   &
105               &                          + sedlam * sedpocn(ji,jj) / fse3t(ji,jj,ikbot(ji,jj))
106
107            !     Deposition of organic matter in the sediment
108            zgeolpoc = zgeolpoc + sedlostpoc * sedpocn(ji,jj) * e1t(ji,jj) * e2t(ji,jj)
109
110!!gm factorisationof rdt just bellow...
111            sedpoca(ji,jj) = zwork(ji,jj) * rdt + dminl(ji,jj) * fbod(ji,jj) * rdt   &
112               &           - sedlam * sedpocn(ji,jj) * rdt - sedlostpoc * sedpocn(ji,jj) * rdt
113
114         END DO
115      END DO
116
117      DO jj = 2,jpjm1
118         DO ji = 2,jpim1
119            tra(ji,jj,1,jpno3) = tra(ji,jj,1,jpno3) + zgeolpoc * cmask(ji,jj) / areacot / fse3t(ji,jj,1)
120         END DO
121      END DO
122
123      CALL lbc_lnk( sedpocn, 'T', 1. )
124 
125      ! Oa & Ek: diagnostics depending on jpdia2d !          left as example
126# if defined key_trc_diaadd
127      trc2d(:,:,19) = sedpocn(:,:)
128# endif
129
130      ! Leap-frog scheme (only in explicit case, otherwise the
131      ! ----------------  time stepping is already done in trczdf)
132      IF( l_trczdf_exp .AND. (ln_trcadv_cen2 .OR. ln_trcadv_tvd) ) THEN
133         zfact = 2. * rdttra(jk) * FLOAT( ndttrc ) 
134         IF( neuler == 0 .AND. kt == nittrc000 )   zfact = rdttra(jk) * FLOAT(ndttrc) 
135         sedpoca(:,:) =  sedpocb(:,:) + zfact * sedpoca(:,:) 
136      ENDIF
137
138     
139      ! Time filter and swap of arrays
140      ! ------------------------------
141      IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd  ) THEN         ! centred or tvd scheme
142         IF( neuler == 0 .AND. kt == nittrc000 ) THEN
143            DO jj = 1, jpj
144               DO ji = 1, jpi
145                  sedpocb(ji,jj) = sedpocn(ji,jj)
146                  sedpocn(ji,jj) = sedpoca(ji,jj)
147                  sedpoca(ji,jj) = 0.e0
148               END DO
149            END DO
150         ELSE
151            DO jj = 1, jpj
152               DO ji = 1, jpi
153                  sedpocb(ji,jj) = atfp  * ( sedpocb(ji,jj) + sedpoca(ji,jj) )    &
154                     &           + atfp1 *   sedpocn(ji,jj)
155                  sedpocn(ji,jj) = sedpoca(ji,jj)
156                  sedpoca(ji,jj) = 0.e0
157               END DO
158            END DO
159         ENDIF
160      ELSE                                                   !  case of smolar scheme or muscl
161         sedpocb(:,:) = sedpoca(:,:)
162         sedpocn(:,:) = sedpoca(:,:)
163         sedpoca(:,:) = 0.e0
164      ENDIF
165      !
166   END SUBROUTINE trc_exp
167
168#else
169   !!======================================================================
170   !!  Dummy module :                                   No PISCES bio-model
171   !!======================================================================
172CONTAINS
173   SUBROUTINE trc_exp( kt )                   ! Empty routine
174      INTEGER, INTENT( in ) ::   kt
175      WRITE(*,*) 'trc_exp: You should not have seen this print! error?', kt
176   END SUBROUTINE trc_exp
177#endif 
178
179   !!======================================================================
180END MODULE  trcexp
Note: See TracBrowser for help on using the repository browser.