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 trunk/NEMOGCM/NEMO/TOP_SRC/LOBSTER – NEMO

source: trunk/NEMOGCM/NEMO/TOP_SRC/LOBSTER/trcini_lobster.F90 @ 2528

Last change on this file since 2528 was 2528, checked in by rblod, 13 years ago

Update NEMOGCM from branch nemo_v3_3_beta

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