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.
trcini_lobster.F90 in branches/nemo_v3_3_beta/NEMOGCM/NEMO/TOP_SRC/LOBSTER – NEMO

source: branches/nemo_v3_3_beta/NEMOGCM/NEMO/TOP_SRC/LOBSTER/trcini_lobster.F90 @ 2287

Last change on this file since 2287 was 2287, checked in by smasson, 14 years ago

update licence of all NEMO files...

  • Property svn:keywords set to Id
File size: 13.1 KB
Line 
1MODULE trcini_lobster
2   !!======================================================================
3   !!                         ***  MODULE trcini_lobster  ***
4   !! TOP :   initialisation of the LOBSTER biological model
5   !!======================================================================
6   !! History :    -   !  1999-09  (M. Levy) Original code
7   !!              -   !  2000-12  (0. Aumont, E. Kestenare) add sediment
8   !!             1.0  !  2004-03  (C. Ethe) Modularity
9   !!              -   !  2005-03  (O. Aumont, A. El Moussaoui) F90
10   !! History :   2.0  !  2007-12  (C. Ethe, G. Madec) from trcini.lobster1.h90
11   !!----------------------------------------------------------------------
12#if defined key_lobster
13   !!----------------------------------------------------------------------
14   !!   'key_lobster'                                     LOBSTER bio-model
15   !!----------------------------------------------------------------------
16   !! trc_ini_lobster  : LOBSTER model initialisation
17   !!----------------------------------------------------------------------
18   USE par_trc         ! TOP parameters
19   USE sms_lobster     ! Source Minus Sink variables
20   USE oce_trc         ! ocean variables
21   USE trc
22   USE lbclnk 
23   USE lib_mpp 
24
25   IMPLICIT NONE
26   PRIVATE
27
28   PUBLIC   trc_ini_lobster   ! called by trcini.F90 module
29
30#  include "top_substitute.h90"
31   !!----------------------------------------------------------------------
32   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
33   !! $Id$
34   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
35   !!----------------------------------------------------------------------
36
37CONTAINS
38
39   SUBROUTINE trc_ini_lobster
40      !!----------------------------------------------------------------------
41      !!                    ***  ROUTINE trc_ini_lobster  ***
42      !! ** purpose :   specific initialisation for LOBSTER bio-model
43      !!----------------------------------------------------------------------
44      INTEGER  ::   ji, jj, jk, jn
45      REAL(wp) ::   ztest, zfluo, zfluu
46      REAL(wp), DIMENSION(jpi,jpj)     ::   zrro
47      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zdm0
48      !!----------------------------------------------------------------------
49
50      !  Control consitency
51      CALL trc_ctl_lobster
52
53
54      IF(lwp) WRITE(numout,*)
55      IF(lwp) WRITE(numout,*) ' trc_ini_lobster :   LOBSTER biochemical model initialisation'
56      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~~'
57
58      ! initialization of fields for optical model
59      ! --------------------------------------------
60      xze (:,:)   = 5.e0
61      xpar(:,:,:) = 0.e0
62
63      ! initialization for passive tracer remineralisation-damping  array
64      ! -----------------------------------------------------------------
65
66      DO jn = jp_lob0, jp_lob1
67         remdmp(:,jn) = tminr
68      END DO
69
70      IF(lwp) THEN
71         WRITE(numout,*) ' '
72         WRITE(numout,*) ' trcini: compute remineralisation-damping  '
73         WRITE(numout,*) '         arrays for tracers'
74      ENDIF
75
76      ! initialization of biological variables
77      ! ------------------------------------------
78
79      ! Calculate vertical distribution of newly formed biogenic poc
80      ! in the water column in the case of max. possible bottom depth
81      ! ------------------------------------------------------------
82
83      zdm0   = 0.e0
84      zrro = 1.e0
85      DO jk = jpkb,jpkm1
86         DO jj =1, jpj
87            DO ji =1, jpi
88               zfluo = ( fsdepw(ji,jj,jk  ) / fsdepw(ji,jj,jpkb) )**xhr 
89               zfluu = ( fsdepw(ji,jj,jk+1) / fsdepw(ji,jj,jpkb) )**xhr
90               IF( zfluo.GT.1. )   zfluo = 1.e0
91               zdm0(ji,jj,jk) = zfluo - zfluu
92               IF( jk <= jpkb-1 )   zdm0(ji,jj,jk) = 0.e0
93               zrro(ji,jj) = zrro(ji,jj) - zdm0(ji,jj,jk)
94            END DO
95         END DO
96      END DO
97
98      zdm0(:,:,jpk) = zrro(:,:)
99
100      ! Calculate vertical distribution of newly formed biogenic poc
101      ! in the water column with realistic topography (first "dry" layer
102      ! contains total fraction, which has passed to the upper layers)
103      ! ----------------------------------------------------------------------
104      dminl = 0.
105      dmin3 = zdm0
106      DO jk = 1, jpk
107         DO jj = 1, jpj
108            DO ji = 1, jpi
109               IF( tmask(ji,jj,jk) == 0. ) THEN
110                  dminl(ji,jj) = dminl(ji,jj) + dmin3(ji,jj,jk)
111                  dmin3(ji,jj,jk) = 0.e0
112               ENDIF
113            END DO
114         END DO
115      END DO
116
117      DO jj = 1, jpj
118         DO ji = 1, jpi
119            IF( tmask(ji,jj,1) == 0 )   dmin3(ji,jj,1) = 0.e0
120         END DO
121      END DO
122
123      ! Coastal mask
124      ! ------------   
125      cmask(:,:) = 0.e0
126      DO ji = 2, jpi-1
127         DO jj = 2, jpj-1
128            if (tmask(ji,jj,1) == 1) then
129               ztest=tmask(ji+1,jj,1)*tmask(ji-1,jj,1)*tmask(ji,jj+1,1)*tmask(ji,jj-1,1)
130               IF (ztest == 0) cmask(ji,jj) = 1.
131            endif
132         END DO
133      END DO
134
135      CALL lbc_lnk( cmask, 'T', 1. )
136
137      ! Coastal surface
138      ! ---------------
139      areacot = 0.e0
140      DO ji = 1, jpi
141         DO jj = 1, jpj
142            areacot = areacot + e1t(ji,jj) * e2t(ji,jj) * cmask(ji,jj)
143         END DO
144      END DO
145      !
146      IF( lk_mpp ) CALL mpp_sum( areacot )   ! sum over the global domain
147
148      ! Initialization of tracer concentration in case of  no restart
149      !-------------------------------------------------------------
150      IF( .NOT. ln_rsttr ) THEN   
151
152# if defined key_eel_r6 || defined key_eel_r2
153         ! LOBSTER initialisation for EEL
154         ! ----------------------
155         ! here: analytical initialisation used in Levy et al. (2001)
156         
157         DO jk = 1, 7
158            trn(:,:,jk,jp_lob_det) = 0.016 * tmask(:,:,jk)
159            trn(:,:,jk,jp_lob_zoo) = 0.018 * tmask(:,:,jk)
160            trn(:,:,jk,jp_lob_phy) = 0.036 * tmask(:,:,jk) 
161            trn(:,:,jk,jp_lob_no3) = 1.e-5 * tmask(:,:,jk)
162            trn(:,:,jk,jp_lob_nh4) = 5.e-4 * tmask(:,:,jk)
163            trn(:,:,jk,jp_lob_dom) = 0.017 * tmask(:,:,jk)
164         END DO
165         
166         trn(:,:, 8,jp_lob_det) = 0.020   * tmask(:,:, 8)
167         trn(:,:, 8,jp_lob_zoo) = 0.027   * tmask(:,:, 8)
168         trn(:,:, 8,jp_lob_phy) = 0.041   * tmask(:,:, 8)
169         trn(:,:, 8,jp_lob_no3) = 0.00022 * tmask(:,:, 8)
170         trn(:,:, 8,jp_lob_nh4) = 0.0033  * tmask(:,:, 8)
171         trn(:,:, 8,jp_lob_dom) = 0.021   * tmask(:,:, 8)
172         
173         trn(:,:, 9,jp_lob_det) = 0.0556  * tmask(:,:, 9)
174         trn(:,:, 9,jp_lob_zoo) = 0.123   * tmask(:,:, 9)
175         trn(:,:, 9,jp_lob_phy) = 0.122   * tmask(:,:, 9)
176         trn(:,:, 9,jp_lob_no3) = 0.028   * tmask(:,:, 9)
177         trn(:,:, 9,jp_lob_nh4) = 0.024   * tmask(:,:, 9)
178         trn(:,:, 9,jp_lob_dom) = 0.06    * tmask(:,:, 9)
179         
180         trn(:,:,10,jp_lob_det) = 0.025   * tmask(:,:,10)
181         trn(:,:,10,jp_lob_zoo) = 0.016   * tmask(:,:,10)
182         trn(:,:,10,jp_lob_phy) = 0.029   * tmask(:,:,10)
183         trn(:,:,10,jp_lob_no3) = 2.462   * tmask(:,:,10)
184         trn(:,:,10,jp_lob_nh4) = 0.04    * tmask(:,:,10)
185         trn(:,:,10,jp_lob_dom) = 0.022   * tmask(:,:,10)
186         
187         trn(:,:,11,jp_lob_det) = 0.0057  * tmask(:,:,11)
188         trn(:,:,11,jp_lob_zoo) = 0.0005  * tmask(:,:,11)
189         trn(:,:,11,jp_lob_phy) = 0.0006  * tmask(:,:,11)
190         trn(:,:,11,jp_lob_no3) = 3.336   * tmask(:,:,11)
191         trn(:,:,11,jp_lob_nh4) = 0.005   * tmask(:,:,11)
192         trn(:,:,11,jp_lob_dom) = 0.004   * tmask(:,:,11)
193         
194         trn(:,:,12,jp_lob_det) = 0.002   * tmask(:,:,12)
195         trn(:,:,12,jp_lob_zoo) = 1.e-6   * tmask(:,:,12)
196         trn(:,:,12,jp_lob_phy) = 5.e-6   * tmask(:,:,12)
197         trn(:,:,12,jp_lob_no3) = 4.24    * tmask(:,:,12)
198         trn(:,:,12,jp_lob_nh4) = 0.001   * tmask(:,:,12)
199         trn(:,:,12,jp_lob_dom) = 3.e-5   * tmask(:,:,12)
200         
201         DO jk=13,jpk
202            trn(:,:,jk,jp_lob_det) = 0.e0
203            trn(:,:,jk,jp_lob_zoo) = 0.e0
204            trn(:,:,jk,jp_lob_phy) = 0.e0
205            trn(:,:,jk,jp_lob_nh4) = 0.e0
206            trn(:,:,jk,jp_lob_dom) = 0.e0
207         END DO
208         
209         trn(:,:,13,jp_lob_no3) = 5.31  * tmask(:,:,13)
210         trn(:,:,14,jp_lob_no3) = 6.73  * tmask(:,:,14)
211         trn(:,:,15,jp_lob_no3) = 8.32  * tmask(:,:,15)
212         trn(:,:,16,jp_lob_no3) = 10.13 * tmask(:,:,16)
213         trn(:,:,17,jp_lob_no3) = 11.95 * tmask(:,:,17)
214         trn(:,:,18,jp_lob_no3) = 13.57 * tmask(:,:,18)
215         trn(:,:,19,jp_lob_no3) = 15.08 * tmask(:,:,19)
216         trn(:,:,20,jp_lob_no3) = 16.41 * tmask(:,:,20)
217         trn(:,:,21,jp_lob_no3) = 17.47 * tmask(:,:,21)
218         trn(:,:,22,jp_lob_no3) = 18.29 * tmask(:,:,22)
219         trn(:,:,23,jp_lob_no3) = 18.88 * tmask(:,:,23)
220         trn(:,:,24,jp_lob_no3) = 19.30 * tmask(:,:,24)
221         trn(:,:,25,jp_lob_no3) = 19.68 * tmask(:,:,25)
222         trn(:,:,26,jp_lob_no3) = 19.91 * tmask(:,:,26)
223         trn(:,:,27,jp_lob_no3) = 19.99 * tmask(:,:,27)
224         trn(:,:,28,jp_lob_no3) = 20.01 * tmask(:,:,28)
225         trn(:,:,29,jp_lob_no3) = 20.01 * tmask(:,:,29)
226         trn(:,:,30,jp_lob_no3) = 20.01 * tmask(:,:,30)
227
228# elif defined key_gyre
229         ! LOBSTER initialisation for GYRE
230         ! ----------------------
231         ! here:  init NO3=f(density) by asklod AS Kremeur 2005-07
232         trn(:,:,:,jp_lob_det) = 0.1 * tmask(:,:,:)
233         trn(:,:,:,jp_lob_zoo) = 0.1 * tmask(:,:,:)
234         trn(:,:,:,jp_lob_nh4) = 0.1 * tmask(:,:,:)
235         trn(:,:,:,jp_lob_phy) = 0.1 * tmask(:,:,:)
236         trn(:,:,:,jp_lob_dom) = 1.0 * tmask(:,:,:)
237         DO jk = 1, jpk
238            DO jj = 1, jpj
239               DO ji = 1, jpi
240                  IF( rhd(ji,jj,jk) <= 24.5e-3 ) THEN
241                     trn(ji,jj,jk,jp_lob_no3) = 2. * tmask(ji,jj,jk)
242                  ELSE
243                     trn(ji,jj,jk,jp_lob_no3) = ( 15.55 * ( rhd(ji,jj,jk) * 1000. ) - 380.11 ) * tmask(ji,jj,jk)
244                  ENDIF
245               END DO
246            END DO
247         END DO
248#endif
249
250      ENDIF
251
252      !  initialize the POC in sediments
253      sedpocb(:,:) = 0.e0
254      sedpocn(:,:) = 0.e0
255      sedpoca(:,:) = 0.e0
256
257
258      IF(lwp) WRITE(numout,*) 'Initialization of LOBSTER tracers done'
259      IF(lwp) WRITE(numout,*) ' '
260
261
262   END SUBROUTINE trc_ini_lobster
263
264   SUBROUTINE trc_ctl_lobster
265      !!----------------------------------------------------------------------
266      !!                     ***  ROUTINE trc_ctl_lobster  ***
267      !!
268      !! ** Purpose :   control the cpp options, namelist and files
269      !!----------------------------------------------------------------------
270      INTEGER :: jl, jn
271
272      IF(lwp) WRITE(numout,*)
273      IF(lwp) WRITE(numout,*) ' use LOBSTER biological model '
274
275      ! Check number of tracers
276      ! -----------------------
277      IF( jp_lobster /= 6 ) CALL ctl_stop( ' LOBSTER has 6 passive tracers. Change jp_lobster in par_lobster.F90' )
278
279      ! Check tracer names
280      ! ------------------
281      IF(   ctrcnm(jp_lob_det) /= 'DET' .OR. ctrcnm(jp_lob_zoo) /= 'ZOO' .OR.   &
282         &  ctrcnm(jp_lob_phy) /= 'PHY' .OR. ctrcnm(jp_lob_no3) /= 'NO3' .OR.   &
283         &  ctrcnm(jp_lob_nh4) /= 'NH4' .OR. ctrcnm(jp_lob_dom) /= 'DOM' .OR.   &
284         &  ctrcnl(jp_lob_det) /= 'Detritus'                        .OR.   &
285         &  ctrcnl(jp_lob_zoo) /= 'Zooplankton concentration'       .OR.   &
286         &  ctrcnl(jp_lob_phy) /= 'Phytoplankton concentration'     .OR.   &
287         &  ctrcnl(jp_lob_no3) /= 'Nitrate concentration'           .OR.   &
288         &  ctrcnl(jp_lob_nh4) /= 'Ammonium concentration'          .OR.   &
289         &  ctrcnl(jp_lob_dom) /= 'Dissolved organic matter' ) THEN
290         ctrcnm(jp_lob_det)='DET'
291         ctrcnl(jp_lob_det)='Detritus'
292         ctrcnm(jp_lob_zoo)='ZOO'
293         ctrcnl(jp_lob_zoo)='Zooplankton concentration'
294         ctrcnm(jp_lob_phy)='PHY'
295         ctrcnl(jp_lob_phy)='Phytoplankton concentration'
296         ctrcnm(jp_lob_no3)='NO3'
297         ctrcnl(jp_lob_no3)='Nitrate concentration'
298         ctrcnm(jp_lob_nh4)='NH4'
299         ctrcnl(jp_lob_nh4)='Ammonium concentration'
300         ctrcnm(jp_lob_dom)='DOM'
301         ctrcnl(jp_lob_dom)='Dissolved organic matter'
302         IF(lwp) THEN
303            CALL ctl_warn( ' We force tracer names ' )
304            DO jl = 1, jp_lobster
305               jn = jp_lob0 + jl - 1
306               WRITE(numout,*) ' tracer nb: ',jn,' name = ',ctrcnm(jn), ctrcnl(jn)
307            END DO
308            WRITE(numout,*) ' '
309         ENDIF
310      ENDIF
311
312      ! Check tracer units
313      DO jl = 1, jp_lobster
314         jn = jp_lob0 + jl - 1
315         IF( ctrcun(jn) /= 'mmole-N/m3') THEN
316            ctrcun(jn) = 'mmole-N/m3'
317            IF(lwp) THEN
318               CALL ctl_warn( ' We force tracer units ' )
319               WRITE(numout,*) ' tracer  ',ctrcnm(jn), 'UNIT= ',ctrcun(jn)
320            ENDIF
321         ENDIF
322      END DO
323
324   END SUBROUTINE trc_ctl_lobster
325
326#else
327   !!----------------------------------------------------------------------
328   !!   Dummy module                                   No LOBSTER bio-model
329   !!----------------------------------------------------------------------
330CONTAINS
331   SUBROUTINE trc_ini_lobster             ! Empty routine
332   END SUBROUTINE trc_ini_lobster
333#endif
334
335   !!======================================================================
336END MODULE trcini_lobster
Note: See TracBrowser for help on using the repository browser.