source: branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90 @ 5266

Last change on this file since 5266 was 5266, checked in by cetlod, 6 years ago

PISCES_QUOTA : First commits, see ticket #1516

  • Property svn:keywords set to Id
File size: 16.1 KB
Line 
1MODULE trcini_pisces
2   !!======================================================================
3   !!                         ***  MODULE trcini_pisces  ***
4   !! TOP :   initialisation of the PISCES biochemical model
5   !!======================================================================
6   !! History :    -   !  1988-07  (E. Maier-Reiner) Original code
7   !!              -   !  1999-10  (O. Aumont, C. Le Quere)
8   !!              -   !  2002     (O. Aumont)  PISCES
9   !!             1.0  !  2005-03  (O. Aumont, A. El Moussaoui) F90
10   !!             2.0  !  2007-12  (C. Ethe, G. Madec) from trcini.pisces.h90
11   !!             3.5  !  2012-05  (C. Ethe) Merge PISCES-LOBSTER
12   !!----------------------------------------------------------------------
13#if defined key_pisces || defined key_pisces_reduced || defined key_pisces_quota
14   !!----------------------------------------------------------------------
15   !!   'key_pisces'                                       PISCES bio-model
16   !!----------------------------------------------------------------------
17   !! trc_ini_pisces   : PISCES biochemical model initialisation
18   !!----------------------------------------------------------------------
19   USE par_trc         ! TOP parameters
20   USE oce_trc         !  shared variables between ocean and passive tracers
21   USE trc             !  passive tracers common variables
22   USE sms_pisces      !  PISCES Source Minus Sink variables
23
24   IMPLICIT NONE
25   PRIVATE
26
27   PUBLIC   trc_ini_pisces   ! called by trcini.F90 module
28
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   !!----------------------------------------------------------------------
36CONTAINS
37
38   SUBROUTINE trc_ini_pisces
39      !!----------------------------------------------------------------------
40      !!                   ***  ROUTINE trc_ini_pisces ***
41      !!
42      !! ** Purpose :   Initialisation of the PISCES biochemical model
43      !!----------------------------------------------------------------------
44
45      SELECT CASE ( nn_p4z )
46      !
47        CASE(1)          ;   CALL p2z_ini   !  LOBSTER
48        CASE(2)          ;   CALL p4z_ini   !  PISCES
49        CASE(3)          ;   CALL p5z_ini   !  PISCES QUOTA
50
51      END SELECT
52
53   END SUBROUTINE trc_ini_pisces
54
55   SUBROUTINE p5z_ini
56      !!----------------------------------------------------------------------
57      !!                   ***  ROUTINE p5z_ini ***
58      !!
59      !! ** Purpose :   Initialisation of the PISCES biochemical model
60      !!                with variable stoichiometry
61      !!----------------------------------------------------------------------
62#if defined key_pisces_quota 
63      !
64      USE p5zsms          ! Main P4Z routine
65      USE p4zche          !  Chemical model
66      USE p5zsink         !  vertical flux of particulate matter due to sinking
67      USE p4zopt          !  optical model
68      USE p4zsbc          !  Boundary conditions
69      USE p4zfechem       !  Iron chemistry
70      USE p5zrem          !  Remineralisation of organic matter
71      USE p4zflx          !  Gas exchange
72      USE p5zlim          !  Co-limitations of differents nutrients
73      USE p5zprod         !  Growth rate of the 2 phyto groups
74      USE p5zmicro        !  Sources and sinks of microzooplankton
75      USE p5zmeso         !  Sources and sinks of mesozooplankton
76      USE p5zmort         !  Mortality terms for phytoplankton
77      USE p4zlys          !  Calcite saturation
78      !
79      REAL(wp), SAVE :: sco2   =  2.312e-3_wp
80      REAL(wp), SAVE :: alka0  =  2.423e-3_wp
81      REAL(wp), SAVE :: oxyg0  =  177.6e-6_wp 
82      REAL(wp), SAVE :: po4    =  2.174e-6_wp 
83      REAL(wp), SAVE :: bioma0 =  1.000e-8_wp 
84      REAL(wp), SAVE :: silic1 =  91.65e-6_wp 
85      REAL(wp), SAVE :: no3    =  31.04e-6_wp * 7.625_wp
86      !
87      INTEGER  ::  ji, jj, jk, ierr
88      REAL(wp) ::  zcaralk, zbicarb, zco3
89      REAL(wp) ::  ztmas, ztmas1
90      !!----------------------------------------------------------------------
91
92      IF(lwp) WRITE(numout,*)
93      IF(lwp) WRITE(numout,*) ' p5z_ini :   PISCES biochemical model initialisation'
94      IF(lwp) WRITE(numout,*) '             With variable stoichiometry'
95      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~'
96
97                                                 ! Allocate PISCES arrays
98      ierr =         sms_pisces_alloc()         
99      ierr = ierr +  p4z_che_alloc()
100      ierr = ierr +  p5z_sink_alloc()
101      ierr = ierr +  p4z_opt_alloc()
102      ierr = ierr +  p5z_prod_alloc()
103      ierr = ierr +  p5z_rem_alloc()
104      ierr = ierr +  p4z_flx_alloc()
105      !
106      IF( lk_mpp    )   CALL mpp_sum( ierr )
107      IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'pisces_alloc: unable to allocate PISCES arrays' )
108      !
109      CALL p5z_sms_init       !  Maint routine
110      !                                            ! Time-step
111      rfact   = rdttrc(1)                          ! ---------
112      rfactr  = 1. / rfact
113      rfact2  = rfact / FLOAT( nrdttrc )
114      rfact2r = 1. / rfact2
115
116      IF(lwp) WRITE(numout,*) '    Passive Tracer  time step    rfact  = ', rfact, ' rdt = ', rdttra(1)
117      IF(lwp) write(numout,*) '    PISCES  Biology time step    rfact2 = ', rfact2
118
119      ! Set biological ratios
120      ! ---------------------
121      rno3    =  16._wp / 122._wp
122      po4r    =   1._wp / 122._wp
123      o2nit   =  32._wp / 122._wp
124      rdenit  = 105._wp /  16._wp
125      rdenita =   3._wp /  5._wp
126      o2ut    = 133._wp / 122._wp
127      no3rat3 = no3rat3 / rno3
128      po4rat3 = po4rat3 / po4r
129
130      ! Initialization of tracer concentration in case of  no restart
131      !--------------------------------------------------------------
132      IF( .NOT. ln_rsttr ) THEN 
133         
134         trn(:,:,:,jpdic) = sco2
135         trn(:,:,:,jpdoc) = bioma0
136         trn(:,:,:,jpdon) = bioma0
137         trn(:,:,:,jpdop) = bioma0
138         trn(:,:,:,jptal) = alka0
139         trn(:,:,:,jpoxy) = oxyg0
140         trn(:,:,:,jpcal) = bioma0
141         trn(:,:,:,jppo4) = po4 / po4r
142         trn(:,:,:,jppoc) = bioma0
143         trn(:,:,:,jppon) = bioma0
144         trn(:,:,:,jppop) = bioma0
145#  if ! defined key_kriest
146         trn(:,:,:,jpgoc) = bioma0
147         trn(:,:,:,jpgon) = bioma0
148         trn(:,:,:,jpgop) = bioma0
149         trn(:,:,:,jpbfe) = bioma0 * 5.e-6
150#  else
151         trn(:,:,:,jpnum) = bioma0 / ( 6. * xkr_massp )
152#  endif
153         trn(:,:,:,jpsil) = silic1
154         trn(:,:,:,jpdsi) = bioma0 * 0.15
155         trn(:,:,:,jpgsi) = bioma0 * 5.e-6
156         trn(:,:,:,jpphy) = bioma0
157         trn(:,:,:,jpnph) = bioma0
158         trn(:,:,:,jppph) = bioma0
159         trn(:,:,:,jppic) = bioma0
160         trn(:,:,:,jpnpi) = bioma0
161         trn(:,:,:,jpppi) = bioma0
162         trn(:,:,:,jpdia) = bioma0
163         trn(:,:,:,jpndi) = bioma0
164         trn(:,:,:,jppdi) = bioma0
165         trn(:,:,:,jpzoo) = bioma0
166         trn(:,:,:,jpmes) = bioma0
167         trn(:,:,:,jpfer) = 0.6E-9
168         trn(:,:,:,jpsfe) = bioma0 * 5.e-6
169         trn(:,:,:,jppfe) = bioma0 * 5.e-6
170         trn(:,:,:,jpdfe) = bioma0 * 5.e-6
171         trn(:,:,:,jpnfe) = bioma0 * 5.e-6
172         trn(:,:,:,jpnch) = bioma0 * 12. / 55.
173         trn(:,:,:,jppch) = bioma0 * 12. / 55.
174         trn(:,:,:,jpdch) = bioma0 * 12. / 55.
175         trn(:,:,:,jpno3) = no3
176         trn(:,:,:,jpnh4) = bioma0
177
178         ! initialize the half saturation constant for silicate
179         ! ----------------------------------------------------
180         xksi(:,:)    = 2.e-6
181         xksimax(:,:) = xksi(:,:)
182      END IF
183
184      ! Time step duration for biology
185      xstep = rfact2 / rday
186
187      CALL p5z_sink_init      !  vertical flux of particulate organic matter
188      CALL p4z_opt_init       !  Optic: PAR in the water column
189      CALL p5z_lim_init       !  co-limitations by the various nutrients
190      CALL p5z_prod_init      !  phytoplankton growth rate over the global ocean.
191      CALL p4z_sbc_init       !  boundary conditions
192      CALL p4z_fechem_init    !  Iron chemistry
193      CALL p5z_rem_init       !  remineralisation
194      CALL p5z_mort_init      !  phytoplankton mortality
195      CALL p5z_micro_init     !  microzooplankton
196      CALL p5z_meso_init      !  mesozooplankton
197      CALL p4z_lys_init       !  calcite saturation
198      CALL p4z_flx_init       !  gas exchange
199
200      ndayflxtr = 0
201
202      IF(lwp) WRITE(numout,*) 
203      IF(lwp) WRITE(numout,*) 'Initialization of PISCES tracers done'
204      IF(lwp) WRITE(numout,*) 
205#endif
206      !
207   END SUBROUTINE p5z_ini
208
209   SUBROUTINE p4z_ini
210      !!----------------------------------------------------------------------
211      !!                   ***  ROUTINE p4z_ini ***
212      !!
213      !! ** Purpose :   Initialisation of the PISCES biochemical model
214      !!----------------------------------------------------------------------
215#if defined key_pisces 
216      !
217      USE p4zsms          ! Main P4Z routine
218      USE p4zche          !  Chemical model
219      USE p4zsink         !  vertical flux of particulate matter due to sinking
220      USE p4zopt          !  optical model
221      USE p4zsbc          !  Boundary conditions
222      USE p4zfechem       !  Iron chemistry
223      USE p4zrem          !  Remineralisation of organic matter
224      USE p4zflx          !  Gas exchange
225      USE p4zlim          !  Co-limitations of differents nutrients
226      USE p4zprod         !  Growth rate of the 2 phyto groups
227      USE p4zmicro        !  Sources and sinks of microzooplankton
228      USE p4zmeso         !  Sources and sinks of mesozooplankton
229      USE p4zmort         !  Mortality terms for phytoplankton
230      USE p4zlys          !  Calcite saturation
231      !
232      REAL(wp), SAVE :: sco2   =  2.312e-3_wp
233      REAL(wp), SAVE :: alka0  =  2.423e-3_wp
234      REAL(wp), SAVE :: oxyg0  =  177.6e-6_wp
235      REAL(wp), SAVE :: po4    =  2.174e-6_wp
236      REAL(wp), SAVE :: bioma0 =  1.000e-8_wp
237      REAL(wp), SAVE :: silic1 =  91.65e-6_wp
238      REAL(wp), SAVE :: no3    =  31.04e-6_wp * 7.625_wp
239      !
240      INTEGER  ::  ji, jj, jk, ierr
241      REAL(wp) ::  zcaralk, zbicarb, zco3
242      REAL(wp) ::  ztmas, ztmas1
243      !!----------------------------------------------------------------------
244
245      IF(lwp) WRITE(numout,*)
246      IF(lwp) WRITE(numout,*) ' p4z_ini :   PISCES biochemical model initialisation'
247      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~'
248
249                                                 ! Allocate PISCES arrays
250      ierr =         sms_pisces_alloc()
251      ierr = ierr +  p4z_che_alloc()
252      ierr = ierr +  p4z_sink_alloc()
253      ierr = ierr +  p4z_opt_alloc()
254      ierr = ierr +  p4z_prod_alloc()
255      ierr = ierr +  p4z_rem_alloc()
256      ierr = ierr +  p4z_flx_alloc()
257      !
258      IF( lk_mpp    )   CALL mpp_sum( ierr )
259      IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'pisces_alloc: unable to allocate PISCES arrays' )
260      !
261
262      CALL p4z_sms_init       !  Maint routine
263      !                                            ! Time-step
264      rfact   = rdttrc(1)                          ! ---------
265      rfactr  = 1. / rfact
266      rfact2  = rfact / FLOAT( nrdttrc )
267      rfact2r = 1. / rfact2
268
269      IF(lwp) WRITE(numout,*) '    Passive Tracer  time step    rfact  = ', rfact, ' rdt = ', rdttra(1)
270      IF(lwp) write(numout,*) '    PISCES  Biology time step    rfact2 = ', rfact2
271
272
273
274      ! Set biological ratios
275      ! ---------------------
276      rno3    =  16._wp / 122._wp
277      po4r    =   1._wp / 122._wp
278      o2nit   =  32._wp / 122._wp
279      rdenit  = 105._wp /  16._wp
280      rdenita =   3._wp /  5._wp
281      o2ut    = 133._wp / 122._wp
282
283      ! Initialization of tracer concentration in case of  no restart
284      !--------------------------------------------------------------
285      IF( .NOT. ln_rsttr ) THEN
286
287         trn(:,:,:,jpdic) = sco2
288         trn(:,:,:,jpdoc) = bioma0
289         trn(:,:,:,jptal) = alka0
290         trn(:,:,:,jpoxy) = oxyg0
291         trn(:,:,:,jpcal) = bioma0
292         trn(:,:,:,jppo4) = po4 / po4r
293         trn(:,:,:,jppoc) = bioma0
294#  if ! defined key_kriest
295         trn(:,:,:,jpgoc) = bioma0
296         trn(:,:,:,jpbfe) = bioma0 * 5.e-6
297#  else
298         trn(:,:,:,jpnum) = bioma0 / ( 6. * xkr_massp )
299#  endif
300         trn(:,:,:,jpsil) = silic1
301         trn(:,:,:,jpdsi) = bioma0 * 0.15
302         trn(:,:,:,jpgsi) = bioma0 * 5.e-6
303         trn(:,:,:,jpphy) = bioma0
304         trn(:,:,:,jpdia) = bioma0
305         trn(:,:,:,jpzoo) = bioma0
306         trn(:,:,:,jpmes) = bioma0
307         trn(:,:,:,jpfer) = 0.6E-9
308         trn(:,:,:,jpsfe) = bioma0 * 5.e-6
309         trn(:,:,:,jpdfe) = bioma0 * 5.e-6
310         trn(:,:,:,jpnfe) = bioma0 * 5.e-6
311         trn(:,:,:,jpnch) = bioma0 * 12. / 55.
312         trn(:,:,:,jpdch) = bioma0 * 12. / 55.
313         trn(:,:,:,jpno3) = no3
314         trn(:,:,:,jpnh4) = bioma0
315
316         ! initialize the half saturation constant for silicate
317         ! ----------------------------------------------------
318         xksi(:,:)    = 2.e-6
319         xksimax(:,:) = xksi(:,:)
320      END IF
321
322      ! Time step duration for biology
323      xstep = rfact2 / rday
324
325      CALL p4z_sink_init      !  vertical flux of particulate organic matter
326      CALL p4z_opt_init       !  Optic: PAR in the water column
327      CALL p4z_lim_init       !  co-limitations by the various nutrients
328      CALL p4z_prod_init      !  phytoplankton growth rate over the global ocean.
329      CALL p4z_sbc_init       !  boundary conditions
330      CALL p4z_fechem_init    !  Iron chemistry
331      CALL p4z_rem_init       !  remineralisation
332      CALL p4z_mort_init      !  phytoplankton mortality
333      CALL p4z_micro_init     !  microzooplankton
334      CALL p4z_meso_init      !  mesozooplankton
335      CALL p4z_lys_init       !  calcite saturation
336      CALL p4z_flx_init       !  gas exchange
337
338      ndayflxtr = 0
339
340      IF(lwp) WRITE(numout,*)
341      IF(lwp) WRITE(numout,*) 'Initialization of PISCES tracers done'
342      IF(lwp) WRITE(numout,*)
343#endif
344      !
345   END SUBROUTINE p4z_ini
346
347   SUBROUTINE p2z_ini
348      !!----------------------------------------------------------------------
349      !!                   ***  ROUTINE p2z_ini ***
350      !!
351      !! ** Purpose :   Initialisation of the LOBSTER biochemical model
352      !!----------------------------------------------------------------------
353#if defined key_pisces_reduced 
354      !
355      USE p2zopt
356      USE p2zexp
357      USE p2zbio
358      USE p2zsed
359      !
360      INTEGER  ::  ji, jj, jk, ierr
361      !!----------------------------------------------------------------------
362
363      IF(lwp) WRITE(numout,*)
364      IF(lwp) WRITE(numout,*) ' p2z_ini :   LOBSTER biochemical model initialisation'
365      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~'
366
367      ierr =        sms_pisces_alloc()         
368      ierr = ierr + p2z_exp_alloc()
369      !
370      IF( lk_mpp    )   CALL mpp_sum( ierr )
371      IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'p2z_ini: unable to allocate LOBSTER arrays' )
372
373      ! LOBSTER initialisation for GYRE : init NO3=f(density) by asklod AS Kremeur 2005-07
374      ! ----------------------
375      IF( .NOT. ln_rsttr ) THEN             ! in case of  no restart
376         trn(:,:,:,jpdet) = 0.1 * tmask(:,:,:)
377         trn(:,:,:,jpzoo) = 0.1 * tmask(:,:,:)
378         trn(:,:,:,jpnh4) = 0.1 * tmask(:,:,:)
379         trn(:,:,:,jpphy) = 0.1 * tmask(:,:,:)
380         trn(:,:,:,jpdom) = 1.0 * tmask(:,:,:)
381         WHERE( rhd(:,:,:) <= 24.5e-3 )  ;  trn(:,:,:,jpno3 ) = 2._wp * tmask(:,:,:)
382         ELSE WHERE                      ;  trn(:,:,:,jpno3) = ( 15.55 * ( rhd(:,:,:) * 1000. ) - 380.11 ) * tmask(:,:,:)
383         END WHERE                       
384      ENDIF
385      !                       !  Namelist read
386      CALL p2z_opt_init       !  Optics parameters
387      CALL p2z_sed_init       !  sedimentation
388      CALL p2z_bio_init       !  biology
389      CALL p2z_exp_init       !  export
390      !
391      IF(lwp) WRITE(numout,*) 
392      IF(lwp) WRITE(numout,*) 'Initialization of LOBSTER tracers done'
393      IF(lwp) WRITE(numout,*) 
394#endif
395      !
396   END SUBROUTINE p2z_ini
397#else
398   !!----------------------------------------------------------------------
399   !!   Dummy module                            No PISCES biochemical model
400   !!----------------------------------------------------------------------
401CONTAINS
402   SUBROUTINE trc_ini_pisces             ! Empty routine
403   END SUBROUTINE trc_ini_pisces
404#endif
405
406   !!======================================================================
407END MODULE trcini_pisces
Note: See TracBrowser for help on using the repository browser.