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 @ 2715

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

First attempt to put dynamic allocation on the trunk

  • Property svn:keywords set to Id
File size: 10.8 KB
Line 
1MODULE trcini_lobster
2   !!======================================================================
3   !!                         ***  MODULE trcini_lobster  ***
4   !! TOP :   initialisation of the LOBSTER biological model
5   !!======================================================================
6   !! History :   OPA  !  1999-09  (M. Levy) Original code
7   !!              -   !  2000-12  (0. Aumont, E. Kestenare) add sediment
8   !!   NEMO      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
24   IMPLICIT NONE
25   PRIVATE
26
27   PUBLIC   trc_ini_lobster   ! called by trcini.F90 module
28
29#  include "top_substitute.h90"
30   !!----------------------------------------------------------------------
31   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
32   !! $Id$
33   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
34   !!----------------------------------------------------------------------
35CONTAINS
36
37   SUBROUTINE trc_ini_lobster
38      !!----------------------------------------------------------------------
39      !!                    ***  ROUTINE trc_ini_lobster  ***
40      !! ** purpose :   specific initialisation for LOBSTER bio-model
41      !!----------------------------------------------------------------------
42      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released
43      USE wrk_nemo, ONLY:   zrro => wrk_2d_1 , zdm0 => wrk_3d_1
44      !!
45      INTEGER  ::   ji, jj, jk, jn
46      REAL(wp) ::   ztest, zfluo, zfluu
47      !!----------------------------------------------------------------------
48      !
49      IF(  wrk_in_use(2, 1)  .OR.  wrk_in_use(3, 1)  )  THEN
50         CALL ctl_stop('trc_ini_lobster: requested workspace arrays unavailable')   ;  RETURN
51      ENDIF
52
53      IF(lwp) WRITE(numout,*)
54      IF(lwp) WRITE(numout,*) ' trc_ini_lobster :   LOBSTER biochemical model initialisation'
55      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~~'
56
57      !                                ! Allocate LOBSTER arrays
58      IF( sms_lobster_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'trc_ini_lobster: unable to allocate LOBSTER arrays' )
59
60
61
62      ! initialization of fields for optical model
63      ! --------------------------------------------
64      xze (:,:)   = 5._wp
65      xpar(:,:,:) = 0._wp
66
67      ! initialization for passive tracer remineralisation-damping  array
68      ! -----------------------------------------------------------------
69
70      DO jn = jp_lob0, jp_lob1
71         remdmp(:,jn) = tminr
72      END DO
73
74      IF(lwp) THEN
75         WRITE(numout,*)
76         WRITE(numout,*) ' trcini: compute remineralisation-damping arrays for tracers'
77      ENDIF
78
79      ! initialization of biological variables
80      ! ------------------------------------------
81
82      ! Calculate vertical distribution of newly formed biogenic poc
83      ! in the water column in the case of max. possible bottom depth
84      ! ------------------------------------------------------------
85
86      zdm0 = 0._wp
87      zrro = 1._wp
88      DO jk = jpkb, jpkm1
89         DO jj = 1, jpj
90            DO ji = 1, jpi
91               zfluo = ( fsdepw(ji,jj,jk  ) / fsdepw(ji,jj,jpkb) )**xhr 
92               zfluu = ( fsdepw(ji,jj,jk+1) / fsdepw(ji,jj,jpkb) )**xhr
93               IF( zfluo.GT.1. )   zfluo = 1._wp
94               zdm0(ji,jj,jk) = zfluo - zfluu
95               IF( jk <= jpkb-1 )   zdm0(ji,jj,jk) = 0._wp
96               zrro(ji,jj) = zrro(ji,jj) - zdm0(ji,jj,jk)
97            END DO
98         END DO
99      END DO
100      !
101      zdm0(:,:,jpk) = zrro(:,:)
102
103      ! Calculate vertical distribution of newly formed biogenic poc
104      ! in the water column with realistic topography (first "dry" layer
105      ! contains total fraction, which has passed to the upper layers)
106      ! ----------------------------------------------------------------------
107      dminl(:,:)   = 0._wp
108      dmin3(:,:,:) = zdm0
109      DO jk = 1, jpk
110         DO jj = 1, jpj
111            DO ji = 1, jpi
112               IF( tmask(ji,jj,jk) == 0._wp ) THEN
113                  dminl(ji,jj) = dminl(ji,jj) + dmin3(ji,jj,jk)
114                  dmin3(ji,jj,jk) = 0._wp
115               ENDIF
116            END DO
117         END DO
118      END DO
119
120      DO jj = 1, jpj
121         DO ji = 1, jpi
122            IF( tmask(ji,jj,1) == 0 )   dmin3(ji,jj,1) = 0._wp
123         END DO
124      END DO
125
126      ! Coastal mask
127      ! ------------   
128      cmask(:,:) = 0._wp
129      DO ji = 2, jpi-1
130         DO jj = 2, jpj-1
131            IF( tmask(ji,jj,1) == 1._wp ) THEN
132               ztest=tmask(ji+1,jj,1)*tmask(ji-1,jj,1)*tmask(ji,jj+1,1)*tmask(ji,jj-1,1)
133               IF( ztest == 0 )   cmask(ji,jj) = 1._wp
134            ENDIF
135         END DO
136      END DO
137
138      CALL lbc_lnk( cmask, 'T', 1. )
139
140      ! Coastal surface
141      ! ---------------
142      areacot = glob_sum( e1e2t(:,:) * cmask(:,:) )
143
144      ! Initialization of tracer concentration in case of  no restart
145      !-------------------------------------------------------------
146      IF( .NOT. ln_rsttr ) THEN   
147
148# if defined key_eel_r6 || defined key_eel_r2
149         ! LOBSTER initialisation for EEL
150         ! ----------------------
151         ! here: analytical initialisation used in Levy et al. (2001)
152         
153         DO jk = 1, 7
154            trn(:,:,jk,jp_lob_det) = 0.016 * tmask(:,:,jk)
155            trn(:,:,jk,jp_lob_zoo) = 0.018 * tmask(:,:,jk)
156            trn(:,:,jk,jp_lob_phy) = 0.036 * tmask(:,:,jk) 
157            trn(:,:,jk,jp_lob_no3) = 1.e-5 * tmask(:,:,jk)
158            trn(:,:,jk,jp_lob_nh4) = 5.e-4 * tmask(:,:,jk)
159            trn(:,:,jk,jp_lob_dom) = 0.017 * tmask(:,:,jk)
160         END DO
161         
162         trn(:,:, 8,jp_lob_det) = 0.020   * tmask(:,:, 8)
163         trn(:,:, 8,jp_lob_zoo) = 0.027   * tmask(:,:, 8)
164         trn(:,:, 8,jp_lob_phy) = 0.041   * tmask(:,:, 8)
165         trn(:,:, 8,jp_lob_no3) = 0.00022 * tmask(:,:, 8)
166         trn(:,:, 8,jp_lob_nh4) = 0.0033  * tmask(:,:, 8)
167         trn(:,:, 8,jp_lob_dom) = 0.021   * tmask(:,:, 8)
168         
169         trn(:,:, 9,jp_lob_det) = 0.0556  * tmask(:,:, 9)
170         trn(:,:, 9,jp_lob_zoo) = 0.123   * tmask(:,:, 9)
171         trn(:,:, 9,jp_lob_phy) = 0.122   * tmask(:,:, 9)
172         trn(:,:, 9,jp_lob_no3) = 0.028   * tmask(:,:, 9)
173         trn(:,:, 9,jp_lob_nh4) = 0.024   * tmask(:,:, 9)
174         trn(:,:, 9,jp_lob_dom) = 0.06    * tmask(:,:, 9)
175         
176         trn(:,:,10,jp_lob_det) = 0.025   * tmask(:,:,10)
177         trn(:,:,10,jp_lob_zoo) = 0.016   * tmask(:,:,10)
178         trn(:,:,10,jp_lob_phy) = 0.029   * tmask(:,:,10)
179         trn(:,:,10,jp_lob_no3) = 2.462   * tmask(:,:,10)
180         trn(:,:,10,jp_lob_nh4) = 0.04    * tmask(:,:,10)
181         trn(:,:,10,jp_lob_dom) = 0.022   * tmask(:,:,10)
182         
183         trn(:,:,11,jp_lob_det) = 0.0057  * tmask(:,:,11)
184         trn(:,:,11,jp_lob_zoo) = 0.0005  * tmask(:,:,11)
185         trn(:,:,11,jp_lob_phy) = 0.0006  * tmask(:,:,11)
186         trn(:,:,11,jp_lob_no3) = 3.336   * tmask(:,:,11)
187         trn(:,:,11,jp_lob_nh4) = 0.005   * tmask(:,:,11)
188         trn(:,:,11,jp_lob_dom) = 0.004   * tmask(:,:,11)
189         
190         trn(:,:,12,jp_lob_det) = 0.002   * tmask(:,:,12)
191         trn(:,:,12,jp_lob_zoo) = 1.e-6   * tmask(:,:,12)
192         trn(:,:,12,jp_lob_phy) = 5.e-6   * tmask(:,:,12)
193         trn(:,:,12,jp_lob_no3) = 4.24    * tmask(:,:,12)
194         trn(:,:,12,jp_lob_nh4) = 0.001   * tmask(:,:,12)
195         trn(:,:,12,jp_lob_dom) = 3.e-5   * tmask(:,:,12)
196         
197         DO jk=13,jpk
198            trn(:,:,jk,jp_lob_det) = 0.e0
199            trn(:,:,jk,jp_lob_zoo) = 0.e0
200            trn(:,:,jk,jp_lob_phy) = 0.e0
201            trn(:,:,jk,jp_lob_nh4) = 0.e0
202            trn(:,:,jk,jp_lob_dom) = 0.e0
203         END DO
204         
205         trn(:,:,13,jp_lob_no3) = 5.31  * tmask(:,:,13)
206         trn(:,:,14,jp_lob_no3) = 6.73  * tmask(:,:,14)
207         trn(:,:,15,jp_lob_no3) = 8.32  * tmask(:,:,15)
208         trn(:,:,16,jp_lob_no3) = 10.13 * tmask(:,:,16)
209         trn(:,:,17,jp_lob_no3) = 11.95 * tmask(:,:,17)
210         trn(:,:,18,jp_lob_no3) = 13.57 * tmask(:,:,18)
211         trn(:,:,19,jp_lob_no3) = 15.08 * tmask(:,:,19)
212         trn(:,:,20,jp_lob_no3) = 16.41 * tmask(:,:,20)
213         trn(:,:,21,jp_lob_no3) = 17.47 * tmask(:,:,21)
214         trn(:,:,22,jp_lob_no3) = 18.29 * tmask(:,:,22)
215         trn(:,:,23,jp_lob_no3) = 18.88 * tmask(:,:,23)
216         trn(:,:,24,jp_lob_no3) = 19.30 * tmask(:,:,24)
217         trn(:,:,25,jp_lob_no3) = 19.68 * tmask(:,:,25)
218         trn(:,:,26,jp_lob_no3) = 19.91 * tmask(:,:,26)
219         trn(:,:,27,jp_lob_no3) = 19.99 * tmask(:,:,27)
220         trn(:,:,28,jp_lob_no3) = 20.01 * tmask(:,:,28)
221         trn(:,:,29,jp_lob_no3) = 20.01 * tmask(:,:,29)
222         trn(:,:,30,jp_lob_no3) = 20.01 * tmask(:,:,30)
223
224
225# elif defined key_gyre || defined key_orca_r2
226         ! LOBSTER initialisation for GYRE
227         ! ----------------------
228         ! here:  init NO3=f(density) by asklod AS Kremeur 2005-07
229         trn(:,:,:,jp_lob_det) = 0.1 * tmask(:,:,:)
230         trn(:,:,:,jp_lob_zoo) = 0.1 * tmask(:,:,:)
231         trn(:,:,:,jp_lob_nh4) = 0.1 * tmask(:,:,:)
232         trn(:,:,:,jp_lob_phy) = 0.1 * tmask(:,:,:)
233         trn(:,:,:,jp_lob_dom) = 1.0 * tmask(:,:,:)
234         DO jk = 1, jpk
235            DO jj = 1, jpj
236               DO ji = 1, jpi
237                  IF( rhd(ji,jj,jk) <= 24.5e-3 ) THEN
238                     trn(ji,jj,jk,jp_lob_no3) = 2. * tmask(ji,jj,jk)
239                  ELSE
240                     trn(ji,jj,jk,jp_lob_no3) = ( 15.55 * ( rhd(ji,jj,jk) * 1000. ) - 380.11 ) * tmask(ji,jj,jk)
241                  ENDIF
242               END DO
243            END DO
244         END DO
245#endif
246
247      ENDIF
248
249      !  initialize the POC in sediments
250      sedpocb(:,:) = 0._wp
251      sedpocn(:,:) = 0._wp
252      sedpoca(:,:) = 0._wp
253      !
254      IF(lwp) WRITE(numout,*) 'Initialization of LOBSTER tracers done'
255      !
256      IF(  wrk_not_released(2, 1)  .OR.   &
257           wrk_not_released(3, 1)   )   CALL ctl_stop('trc_ini_lobster: failed to release workspace arrays')
258      !
259   END SUBROUTINE trc_ini_lobster
260
261#else
262   !!----------------------------------------------------------------------
263   !!   Dummy module                                   No LOBSTER bio-model
264   !!----------------------------------------------------------------------
265CONTAINS
266   SUBROUTINE trc_ini_lobster             ! Empty routine
267   END SUBROUTINE trc_ini_lobster
268#endif
269
270   !!======================================================================
271END MODULE trcini_lobster
Note: See TracBrowser for help on using the repository browser.