source: branches/2012/dev_MERGE_2012/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90 @ 3757

Last change on this file since 3757 was 3757, checked in by cetlod, 9 years ago

dev_MERGE_2012 : Minor bug correction + update of namelists for GYRE_PISCES configuration

  • Property svn:keywords set to Id
File size: 10.8 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
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      IF( lk_p4z ) THEN  ;   CALL p4z_ini   !  PISCES
46      ELSE               ;   CALL p2z_ini   !  LOBSTER
47      ENDIF
48
49   END SUBROUTINE trc_ini_pisces
50
51   SUBROUTINE p4z_ini
52      !!----------------------------------------------------------------------
53      !!                   ***  ROUTINE p4z_ini ***
54      !!
55      !! ** Purpose :   Initialisation of the PISCES biochemical model
56      !!----------------------------------------------------------------------
57#if defined key_pisces 
58      !
59      USE p4zsms          ! Main P4Z routine
60      USE p4zche          !  Chemical model
61      USE p4zsink         !  vertical flux of particulate matter due to sinking
62      USE p4zopt          !  optical model
63      USE p4zsbc          !  Boundary conditions
64      USE p4zfechem       !  Iron chemistry
65      USE p4zrem          !  Remineralisation of organic matter
66      USE p4zflx          !  Gas exchange
67      USE p4zlim          !  Co-limitations of differents nutrients
68      USE p4zprod         !  Growth rate of the 2 phyto groups
69      USE p4zmicro        !  Sources and sinks of microzooplankton
70      USE p4zmeso         !  Sources and sinks of mesozooplankton
71      USE p4zmort         !  Mortality terms for phytoplankton
72      USE p4zlys          !  Calcite saturation
73      !
74      REAL(wp), SAVE :: sco2   =  2.312e-3_wp
75      REAL(wp), SAVE :: alka0  =  2.423e-3_wp
76      REAL(wp), SAVE :: oxyg0  =  177.6e-6_wp 
77      REAL(wp), SAVE :: po4    =  2.174e-6_wp 
78      REAL(wp), SAVE :: bioma0 =  1.000e-8_wp 
79      REAL(wp), SAVE :: silic1 =  91.65e-6_wp 
80      REAL(wp), SAVE :: no3    =  31.04e-6_wp * 7.625_wp
81      !
82      INTEGER  ::  ji, jj, jk, ierr
83      REAL(wp) ::  zcaralk, zbicarb, zco3
84      REAL(wp) ::  ztmas, ztmas1
85      !!----------------------------------------------------------------------
86
87      IF(lwp) WRITE(numout,*)
88      IF(lwp) WRITE(numout,*) ' p4z_ini :   PISCES biochemical model initialisation'
89      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~'
90
91                                                 ! Allocate PISCES arrays
92      ierr =         sms_pisces_alloc()         
93      ierr = ierr +  p4z_che_alloc()
94      ierr = ierr +  p4z_sink_alloc()
95      ierr = ierr +  p4z_opt_alloc()
96      ierr = ierr +  p4z_prod_alloc()
97      ierr = ierr +  p4z_rem_alloc()
98      ierr = ierr +  p4z_flx_alloc()
99      !
100      IF( lk_mpp    )   CALL mpp_sum( ierr )
101      IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'pisces_alloc: unable to allocate PISCES arrays' )
102      !
103
104      CALL p4z_sms_init       !  Maint routine
105      !                                            ! Time-step
106      rfact   = rdttrc(1)                          ! ---------
107      rfactr  = 1. / rfact
108      rfact2  = rfact / FLOAT( nrdttrc )
109      rfact2r = 1. / rfact2
110
111      IF(lwp) WRITE(numout,*) '    Passive Tracer  time step    rfact  = ', rfact, ' rdt = ', rdttra(1)
112      IF(lwp) write(numout,*) '    PISCES  Biology time step    rfact2 = ', rfact2
113
114
115
116      ! Set biological ratios
117      ! ---------------------
118      rno3    =  16._wp / 122._wp
119      po4r    =   1._wp / 122._wp
120      o2nit   =  32._wp / 122._wp
121      rdenit  = 105._wp /  16._wp
122      rdenita =   3._wp /  5._wp
123      o2ut    = 131._wp / 122._wp
124
125      CALL p4z_che        ! initialize the chemical constants
126
127      ! Initialization of tracer concentration in case of  no restart
128      !--------------------------------------------------------------
129      IF( .NOT. ln_rsttr ) THEN 
130         
131         trn(:,:,:,jpdic) = sco2
132         trn(:,:,:,jpdoc) = bioma0
133         trn(:,:,:,jptal) = alka0
134         trn(:,:,:,jpoxy) = oxyg0
135         trn(:,:,:,jpcal) = bioma0
136         trn(:,:,:,jppo4) = po4 / po4r
137         trn(:,:,:,jppoc) = bioma0
138#  if ! defined key_kriest
139         trn(:,:,:,jpgoc) = bioma0
140         trn(:,:,:,jpbfe) = bioma0 * 5.e-6
141#  else
142         trn(:,:,:,jpnum) = bioma0 / ( 6. * xkr_massp )
143#  endif
144         trn(:,:,:,jpsil) = silic1
145         trn(:,:,:,jpdsi) = bioma0 * 0.15
146         trn(:,:,:,jpgsi) = bioma0 * 5.e-6
147         trn(:,:,:,jpphy) = bioma0
148         trn(:,:,:,jpdia) = bioma0
149         trn(:,:,:,jpzoo) = bioma0
150         trn(:,:,:,jpmes) = bioma0
151         trn(:,:,:,jpfer) = 0.6E-9
152         trn(:,:,:,jpsfe) = bioma0 * 5.e-6
153         trn(:,:,:,jpdfe) = bioma0 * 5.e-6
154         trn(:,:,:,jpnfe) = bioma0 * 5.e-6
155         trn(:,:,:,jpnch) = bioma0 * 12. / 55.
156         trn(:,:,:,jpdch) = bioma0 * 12. / 55.
157         trn(:,:,:,jpno3) = no3
158         trn(:,:,:,jpnh4) = bioma0
159
160         ! initialize the half saturation constant for silicate
161         ! ----------------------------------------------------
162         xksi(:,:)    = 2.e-6
163         xksimax(:,:) = xksi(:,:)
164
165         ! Initialization of chemical variables of the carbon cycle
166         ! --------------------------------------------------------
167         DO jk = 1, jpk
168            DO jj = 1, jpj
169               DO ji = 1, jpi
170                  ztmas   = tmask(ji,jj,jk)
171                  ztmas1  = 1. - tmask(ji,jj,jk)
172                  zcaralk = trn(ji,jj,jk,jptal) - borat(ji,jj,jk) / (  1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) )  )
173                  zco3    = ( zcaralk - trn(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1
174                  zbicarb = ( 2. * trn(ji,jj,jk,jpdic) - zcaralk )
175                  hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1
176               END DO
177            END DO
178         END DO
179         !
180      END IF
181
182      ! Time step duration for biology
183      xstep = rfact2 / rday
184
185      CALL p4z_sink_init      !  vertical flux of particulate organic matter
186      CALL p4z_opt_init       !  Optic: PAR in the water column
187      CALL p4z_lim_init       !  co-limitations by the various nutrients
188      CALL p4z_prod_init      !  phytoplankton growth rate over the global ocean.
189      CALL p4z_sbc_init       !  boundary conditions
190      CALL p4z_fechem_init    !  Iron chemistry
191      CALL p4z_rem_init       !  remineralisation
192      CALL p4z_mort_init      !  phytoplankton mortality
193      CALL p4z_micro_init     !  microzooplankton
194      CALL p4z_meso_init      !  mesozooplankton
195      CALL p4z_lys_init       !  calcite saturation
196      CALL p4z_flx_init       !  gas exchange
197
198      ndayflxtr = 0
199
200      IF(lwp) WRITE(numout,*) 
201      IF(lwp) WRITE(numout,*) 'Initialization of PISCES tracers done'
202      IF(lwp) WRITE(numout,*) 
203#endif
204      !
205   END SUBROUTINE p4z_ini
206
207   SUBROUTINE p2z_ini
208      !!----------------------------------------------------------------------
209      !!                   ***  ROUTINE p2z_ini ***
210      !!
211      !! ** Purpose :   Initialisation of the LOBSTER biochemical model
212      !!----------------------------------------------------------------------
213#if defined key_pisces_reduced 
214      !
215      USE p2zopt
216      USE p2zexp
217      USE p2zbio
218      USE p2zsed
219      !
220      INTEGER  ::  ji, jj, jk, ierr
221      !!----------------------------------------------------------------------
222
223      IF(lwp) WRITE(numout,*)
224      IF(lwp) WRITE(numout,*) ' p2z_ini :   LOBSTER biochemical model initialisation'
225      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~'
226
227      ierr =        sms_pisces_alloc()         
228      ierr = ierr + p2z_exp_alloc()
229      !
230      IF( lk_mpp    )   CALL mpp_sum( ierr )
231      IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'p2z_ini: unable to allocate LOBSTER arrays' )
232
233      ! LOBSTER initialisation for GYRE : init NO3=f(density) by asklod AS Kremeur 2005-07
234      ! ----------------------
235      IF( .NOT. ln_rsttr ) THEN             ! in case of  no restart
236         trn(:,:,:,jpdet) = 0.1 * tmask(:,:,:)
237         trn(:,:,:,jpzoo) = 0.1 * tmask(:,:,:)
238         trn(:,:,:,jpnh4) = 0.1 * tmask(:,:,:)
239         trn(:,:,:,jpphy) = 0.1 * tmask(:,:,:)
240         trn(:,:,:,jpdom) = 1.0 * tmask(:,:,:)
241         WHERE( rhd(:,:,:) <= 24.5e-3 )  ;  trn(:,:,:,jpno3 ) = 2._wp * tmask(:,:,:)
242         ELSE WHERE                      ;  trn(:,:,:,jpno3) = ( 15.55 * ( rhd(:,:,:) * 1000. ) - 380.11 ) * tmask(:,:,:)
243         END WHERE                       
244      ENDIF
245      !                       !  Namelist read
246      CALL p2z_opt_init       !  Optics parameters
247      CALL p2z_sed_init       !  sedimentation
248      CALL p2z_bio_init       !  biology
249      CALL p2z_exp_init       !  export
250      !
251      IF(lwp) WRITE(numout,*) 
252      IF(lwp) WRITE(numout,*) 'Initialization of LOBSTER tracers done'
253      IF(lwp) WRITE(numout,*) 
254#endif
255      !
256   END SUBROUTINE p2z_ini
257#else
258   !!----------------------------------------------------------------------
259   !!   Dummy module                            No PISCES biochemical model
260   !!----------------------------------------------------------------------
261CONTAINS
262   SUBROUTINE trc_ini_pisces             ! Empty routine
263   END SUBROUTINE trc_ini_pisces
264#endif
265
266   !!======================================================================
267END MODULE trcini_pisces
Note: See TracBrowser for help on using the repository browser.