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.
asmphyto2dbal_medusa.F90 in branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/OPA_SRC/ASM – NEMO

source: branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/OPA_SRC/ASM/asmphyto2dbal_medusa.F90 @ 9432

Last change on this file since 9432 was 9432, checked in by dford, 6 years ago

Rename logchlbal to phyto2dbal.

File size: 24.8 KB
Line 
1MODULE asmphyto2dbal_medusa
2   !!======================================================================
3   !!                       ***  MODULE asmphyto2dbal_medusa  ***
4   !! Calculate increments to MEDUSA based on surface phyto2d increments
5   !!
6   !! IMPORTANT NOTE: This calls the bioanalysis routine of Hemmings et al.
7   !! For licensing reasons this is kept in its own internal Met Office
8   !! branch (dev/frdf/vn3.6_nitrogen_balancing) rather than in the Paris
9   !! repository, and must be merged in when building.
10   !!
11   !!======================================================================
12   !! History :  3.6  ! 2017-08 (D. Ford)  Adapted from asmphyto2dbal_hadocc
13   !!----------------------------------------------------------------------
14#if defined key_asminc && defined key_medusa && defined key_foam_medusa
15   !!----------------------------------------------------------------------
16   !! 'key_asminc'          : assimilation increment interface
17   !! 'key_medusa'          : MEDUSA model
18   !! 'key_foam_medusa'     : MEDUSA extras for FOAM OBS and ASM
19   !!----------------------------------------------------------------------
20   !! asm_phyto2d_bal_medusa : routine to calculate increments to MEDUSA
21   !!----------------------------------------------------------------------
22   USE par_kind,      ONLY: wp             ! kind parameters
23   USE par_oce,       ONLY: jpi, jpj, jpk  ! domain array sizes
24   USE dom_oce,       ONLY: gdepw_n        ! domain information
25   USE zdftmx,        ONLY: ln_tmx_itf, &  ! Indonesian Throughflow
26      &                     mask_itf       ! tidal mixing mask
27   USE iom                                 ! i/o
28   USE sms_medusa                          ! MEDUSA parameters
29   USE par_medusa                          ! MEDUSA parameters
30   USE par_trc,       ONLY: jptra          ! Tracer parameters
31   USE bioanalysis                         ! Nitrogen balancing
32
33   IMPLICIT NONE
34   PRIVATE                   
35
36   PUBLIC asm_phyto2d_bal_medusa
37
38   ! Default values for biological assimilation parameters
39   ! Should match Hemmings et al. (2008)
40   REAL(wp), PARAMETER :: balnutext  =  0.6    !: Default nutrient balancing factor
41   REAL(wp), PARAMETER :: balnutmin  =  0.1    !: Fraction of phytoplankton loss to nutrient
42   REAL(wp), PARAMETER :: r          =  1      !: Reliability of model specific growth rate
43   REAL(wp), PARAMETER :: beta_g     =  0.05   !: Low rate bias correction for growth rate estimator
44   REAL(wp), PARAMETER :: beta_l     =  0.05   !: Low rate bias correction for primary loss rate estimator
45   REAL(wp), PARAMETER :: beta_m     =  0.05   !: Low rate bias correction for secondary loss rate estimator
46   REAL(wp), PARAMETER :: a_g        =  0.2    !: Error s.d. for log10 of growth rate estimator
47   REAL(wp), PARAMETER :: a_l        =  0.4    !: Error s.d. for log10 of primary loss rate estimator
48   REAL(wp), PARAMETER :: a_m        =  0.7    !: Error s.d. for log10 of secondary loss rate estimator
49   REAL(wp), PARAMETER :: zfracb0    =  0.7    !: Base zooplankton fraction of loss to Z & D
50   REAL(wp), PARAMETER :: zfracb1    =  0      !: Phytoplankton sensitivity of zooplankton fraction
51   REAL(wp), PARAMETER :: qrfmax     =  1.1    !: Maximum nutrient limitation reduction factor
52   REAL(wp), PARAMETER :: qafmax     =  1.1    !: Maximum nutrient limitation amplification factor
53   REAL(wp), PARAMETER :: zrfmax     =  2      !: Maximum zooplankton reduction factor
54   REAL(wp), PARAMETER :: zafmax     =  2      !: Maximum zooplankton amplification factor
55   REAL(wp), PARAMETER :: prfmax     =  10     !: Maximum phytoplankton reduction factor (secondary)
56   REAL(wp), PARAMETER :: incphymin  =  0.0001 !: Minimum size of non-zero phytoplankton increment
57   REAL(wp), PARAMETER :: integnstep =  20     !: Number of steps for p.d.f. integral evaluation
58   REAL(wp), PARAMETER :: pthreshold =  0.01   !: Fractional threshold level for setting p.d.f.
59   !
60   LOGICAL,  PARAMETER :: diag_active           = .TRUE.  !: Depth-independent diagnostics
61   LOGICAL,  PARAMETER :: diag_fulldepth_active = .TRUE.  !: Full-depth diagnostics
62   LOGICAL,  PARAMETER :: gl_active             = .TRUE.  !: Growth/loss-based balancing
63   LOGICAL,  PARAMETER :: nbal_active           = .TRUE.  !: Nitrogen balancing
64   LOGICAL,  PARAMETER :: subsurf_active        = .TRUE.  !: Increments below MLD
65   LOGICAL,  PARAMETER :: deepneg_active        = .FALSE. !: Negative primary increments below MLD
66   LOGICAL,  PARAMETER :: deeppos_active        = .FALSE. !: Positive primary increments below MLD
67   LOGICAL,  PARAMETER :: nutprof_active        = .TRUE.  !: Secondary increments
68
69CONTAINS
70
71   SUBROUTINE asm_phyto2d_bal_medusa( ld_chltot,                      &
72      &                               pinc_chltot,                    &
73      &                               ld_chldia,                      &
74      &                               pinc_chldia,                    &
75      &                               ld_chlnon,                      &
76      &                               pinc_chlnon,                    &
77      &                               ld_phytot,                      &
78      &                               pinc_phytot,                    &
79      &                               ld_phydia,                      &
80      &                               pinc_phydia,                    &
81      &                               ld_phynon,                      &
82      &                               pinc_phynon,                    &
83      &                               pincper,                        &
84      &                               p_maxchlinc, ld_phytobal, pmld, &
85      &                               pgrow_avg_bkg, ploss_avg_bkg,   &
86      &                               phyt_avg_bkg, mld_max_bkg,      &
87      &                               tracer_bkg, phyto2d_balinc )
88      !!---------------------------------------------------------------------------
89      !!                    ***  ROUTINE asm_phyto2d_bal_medusa  ***
90      !!
91      !! ** Purpose :   calculate increments to MEDUSA from 2d phytoplankton increments
92      !!
93      !! ** Method  :   average up MEDUSA to look like HadOCC
94      !!                call nitrogen balancing scheme
95      !!                separate back out to MEDUSA
96      !!
97      !! ** Action  :   populate phyto2d_balinc
98      !!
99      !! References :   Hemmings et al., 2008, J. Mar. Res.
100      !!                Ford et al., 2012, Ocean Sci.
101      !!---------------------------------------------------------------------------
102      !!
103      LOGICAL,  INTENT(in   )                               :: ld_chltot      ! Assim chltot y/n
104      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj)           :: pinc_chltot    ! chltot increments
105      LOGICAL,  INTENT(in   )                               :: ld_chldia      ! Assim chldia y/n
106      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj)           :: pinc_chldia    ! chldia increments
107      LOGICAL,  INTENT(in   )                               :: ld_chlnon      ! Assim chlnon y/n
108      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj)           :: pinc_chlnon    ! chlnon increments
109      LOGICAL,  INTENT(in   )                               :: ld_phytot      ! Assim phytot y/n
110      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj)           :: pinc_phytot    ! phytot increments
111      LOGICAL,  INTENT(in   )                               :: ld_phydia      ! Assim phydia y/n
112      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj)           :: pinc_phydia    ! phydia increments
113      LOGICAL,  INTENT(in   )                               :: ld_phynon      ! Assim phynon y/n
114      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj)           :: pinc_phynon    ! phynon increments
115      REAL(wp), INTENT(in   )                               :: pincper        ! Assimilation period
116      REAL(wp), INTENT(in   )                               :: p_maxchlinc    ! Max chl increment
117      LOGICAL,  INTENT(in   )                               :: ld_phytobal    ! Balancing y/n
118      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj)           :: pmld           ! Mixed layer depth
119      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj)           :: pgrow_avg_bkg  ! Avg phyto growth
120      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj)           :: ploss_avg_bkg  ! Avg phyto loss
121      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj)           :: phyt_avg_bkg   ! Avg phyto
122      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj)           :: mld_max_bkg    ! Max MLD
123      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj,jpk,jptra) :: tracer_bkg     ! State variables
124      REAL(wp), INTENT(  out), DIMENSION(jpi,jpj,jpk,jptra) :: phyto2d_balinc ! Balancing increments
125      !!
126      INTEGER                                               :: ji, jj, jk, jn ! Loop counters
127      INTEGER                                               :: jkmax          ! Loop index
128      INTEGER,                 DIMENSION(6)                 :: i_tracer       ! Tracer indices
129      REAL(wp)                                              :: n2be_p         ! N:biomass for total phy
130      REAL(wp)                                              :: n2be_z         ! N:biomass for total zoo
131      REAL(wp)                                              :: n2be_d         ! N:biomass for detritus
132      REAL(wp)                                              :: zfrac_chn      ! Fraction of jpchn
133      REAL(wp)                                              :: zfrac_chd      ! Fraction of jpchd
134      REAL(wp)                                              :: zfrac_phn      ! Fraction of jpphn
135      REAL(wp)                                              :: zfrac_phd      ! Fraction of jpphd
136      REAL(wp)                                              :: zfrac_zmi      ! Fraction of jpzmi
137      REAL(wp)                                              :: zfrac_zme      ! Fraction of jpzme
138      REAL(wp)                                              :: zrat_pds_phd   ! Ratio of jppds:jpphd
139      REAL(wp)                                              :: zrat_chd_phd   ! Ratio of jpchd:jpphd
140      REAL(wp)                                              :: zrat_chn_phn   ! Ratio of jpchn:jpphn
141      REAL(wp)                                              :: zrat_dtc_det   ! Ratio of jpdtc:jpdet
142      REAL(wp),                DIMENSION(jpi,jpj)           :: medusa_chl     ! MEDUSA total chlorophyll
143      REAL(wp),                DIMENSION(jpi,jpj)           :: cchl_p         ! C:Chl for total phy
144      REAL(wp),                DIMENSION(16)                :: modparm        ! Model parameters
145      REAL(wp),                DIMENSION(20)                :: assimparm      ! Assimilation parameters
146      REAL(wp),                DIMENSION(jpi,jpj,jpk,6)     :: bstate         ! Background state
147      REAL(wp),                DIMENSION(jpi,jpj,jpk,6)     :: outincs        ! Balancing increments
148      REAL(wp),                DIMENSION(jpi,jpj,22)        :: diag           ! Depth-indep diagnostics
149      REAL(wp),                DIMENSION(jpi,jpj,jpk,22)    :: diag_fulldepth ! Full-depth diagnostics
150      !!---------------------------------------------------------------------------
151
152      IF ( ld_chltot ) THEN
153         ! If p_maxchlinc > 0 then cap total absolute chlorophyll increment at that value
154         DO jj = 1, jpj
155            DO ji = 1, jpi
156               IF ( p_maxchlinc > 0.0 ) THEN
157                  pinc_chltot(ji,jj) = MAX( -1.0 * p_maxchlinc, MIN( pinc_chltot(ji,jj), p_maxchlinc ) )
158               ENDIF
159            END DO
160         END DO
161      ELSE
162         CALL ctl_stop( ' No PFT assimilation quite yet' )
163      ENDIF
164     
165      IF ( ld_phytobal ) THEN   ! Nitrogen balancing
166
167         ! Set up model parameters to be passed into Hemmings balancing routine.
168         ! For now these are hardwired to the standard HadOCC parameter values
169         ! (except C:N ratios) as this is what the scheme was developed for.
170         ! Obviously, HadOCC and MEDUSA are rather different models, so this
171         ! isn't ideal, but there's not always direct analogues between the two
172         ! parameter sets, so it's the easiest way to get something running.
173         ! In the longer term, some serious MarMOT-based development is required.
174         modparm(1)  = 0.1                               ! grow_sat
175         modparm(2)  = 2.0                               ! psmax
176         modparm(3)  = 0.845                             ! par
177         modparm(4)  = 0.02                              ! alpha
178         modparm(5)  = 0.05                              ! resp_rate
179         modparm(6)  = 0.05                              ! pmort_rate
180         modparm(7)  = 0.01                              ! phyto_min
181         modparm(8)  = 0.05                              ! z_mort_1
182         modparm(9)  = 1.0                               ! z_mort_2
183         modparm(10) = ( xthetapn  + xthetapd  ) / 2.0   ! c2n_p
184         modparm(11) = ( xthetazmi + xthetazme ) / 2.0   ! c2n_z
185         modparm(12) = xthetad                           ! c2n_d
186         modparm(13) = 0.01                              ! graze_threshold
187         modparm(14) = 2.0                               ! holling_coef
188         modparm(15) = 0.5                               ! graze_sat
189         modparm(16) = 2.0                               ! graze_max
190
191         ! Set up assimilation parameters to be passed into balancing routine
192         ! Not sure what assimparm(1) is meant to be, but it doesn't get used
193         assimparm(2)  = balnutext
194         assimparm(3)  = balnutmin
195         assimparm(4)  = r
196         assimparm(5)  = beta_g
197         assimparm(6)  = beta_l
198         assimparm(7)  = beta_m
199         assimparm(8)  = a_g
200         assimparm(9)  = a_l
201         assimparm(10) = a_m
202         assimparm(11) = zfracb0
203         assimparm(12) = zfracb1
204         assimparm(13) = qrfmax
205         assimparm(14) = qafmax
206         assimparm(15) = zrfmax
207         assimparm(16) = zafmax
208         assimparm(17) = prfmax
209         assimparm(18) = incphymin
210         assimparm(19) = integnstep
211         assimparm(20) = pthreshold
212
213         ! Set up external tracer indices array bstate
214         i_tracer(1) = 1   ! nutrient
215         i_tracer(2) = 2   ! phytoplankton
216         i_tracer(3) = 3   ! zooplankton
217         i_tracer(4) = 4   ! detritus
218         i_tracer(5) = 5   ! DIC
219         i_tracer(6) = 6   ! Alkalinity
220
221         ! Set background state
222         bstate(:,:,:,i_tracer(1)) = tracer_bkg(:,:,:,jpdin)
223         bstate(:,:,:,i_tracer(2)) = tracer_bkg(:,:,:,jpphn) + tracer_bkg(:,:,:,jpphd)
224         bstate(:,:,:,i_tracer(3)) = tracer_bkg(:,:,:,jpzmi) + tracer_bkg(:,:,:,jpzme)
225         bstate(:,:,:,i_tracer(4)) = tracer_bkg(:,:,:,jpdet)
226         bstate(:,:,:,i_tracer(5)) = tracer_bkg(:,:,:,jpdic)
227         bstate(:,:,:,i_tracer(6)) = tracer_bkg(:,:,:,jpalk)
228
229         ! Calculate carbon to chlorophyll ratio for combined phytoplankton
230         ! and nitrogen to biomass equivalent for PZD
231         ! Hardwire nitrogen mass to 14.01 for now as it doesn't seem to be set in MEDUSA
232         cchl_p(:,:) = 0.0
233         DO jj = 1, jpj
234            DO ji = 1, jpi
235               IF ( ( tracer_bkg(ji,jj,1,jpchn) + tracer_bkg(ji,jj,1,jpchd ) ) .GT. 0.0 ) THEN
236                  cchl_p(ji,jj) = xmassc * ( ( tracer_bkg(ji,jj,1,jpphn) * xthetapn ) +      &
237                     &                       ( tracer_bkg(ji,jj,1,jpphd) * xthetapd )   ) /  &
238                     &            ( tracer_bkg(ji,jj,1,jpchn) + tracer_bkg(ji,jj,1,jpchd ) )
239               ENDIF
240            END DO
241         END DO
242         n2be_p = 14.01 + ( xmassc * ( ( xthetapn  + xthetapd  ) / 2.0 ) )
243         n2be_z = 14.01 + ( xmassc * ( ( xthetazmi + xthetazme ) / 2.0 ) )
244         n2be_d = 14.01 + ( xmassc * xthetad )
245
246         ! Call nitrogen balancing routine
247         CALL bio_analysis( jpi, jpj, jpk, gdepw_n(:,:,2:jpk), i_tracer, modparm,   &
248            &               n2be_p, n2be_z, n2be_d, assimparm,                      &
249            &               INT(pincper), 1, INT(SUM(tmask,3)), tmask(:,:,:),       &
250            &               pmld(:,:), mld_max_bkg(:,:), pinc_chltot(:,:), cchl_p(:,:), &
251            &               nbal_active, phyt_avg_bkg(:,:),                         &
252            &               gl_active, pgrow_avg_bkg(:,:), ploss_avg_bkg(:,:),      &
253            &               subsurf_active, deepneg_active,                         &
254            &               deeppos_active, nutprof_active,                         &
255            &               bstate, outincs,                                        &
256            &               diag_active, diag,                                      &
257            &               diag_fulldepth_active, diag_fulldepth )
258         
259         ! Loop over each grid point partioning the increments
260         phyto2d_balinc(:,:,:,:) = 0.0
261         DO jk = 1, jpk
262            DO jj = 1, jpj
263               DO ji = 1, jpi
264
265                  IF ( ( tracer_bkg(ji,jj,jk,jpphn) > 0.0 ) .AND. ( tracer_bkg(ji,jj,jk,jpphd) > 0.0 ) ) THEN
266                     ! Phytoplankton nitrogen and silicate split up based on existing ratios
267                     zfrac_phn = tracer_bkg(ji,jj,jk,jpphn) / (tracer_bkg(ji,jj,jk,jpphn) + tracer_bkg(ji,jj,jk,jpphd))
268                     zfrac_phd = 1.0 - zfrac_phn
269                     zrat_pds_phd = tracer_bkg(ji,jj,jk,jppds) / tracer_bkg(ji,jj,jk,jpphd)
270                     phyto2d_balinc(ji,jj,jk,jpphn) = outincs(ji,jj,jk,i_tracer(2)) * zfrac_phn
271                     phyto2d_balinc(ji,jj,jk,jpphd) = outincs(ji,jj,jk,i_tracer(2)) * zfrac_phd
272                     phyto2d_balinc(ji,jj,jk,jppds) = phyto2d_balinc(ji,jj,jk,jpphd) * zrat_pds_phd
273
274                     ! Chlorophyll split up based on existing ratios to phytoplankton nitrogen
275                     ! Not using pinc_chltot directly as it's only 2D
276                     ! This method should give same results at surface as splitting pinc_chltot would
277                     zrat_chn_phn = tracer_bkg(ji,jj,jk,jpchn) / tracer_bkg(ji,jj,jk,jpphn)
278                     zrat_chd_phd = tracer_bkg(ji,jj,jk,jpchd) / tracer_bkg(ji,jj,jk,jpphd)
279                     phyto2d_balinc(ji,jj,jk,jpchn) = phyto2d_balinc(ji,jj,jk,jpphn) * zrat_chn_phn
280                     phyto2d_balinc(ji,jj,jk,jpchd) = phyto2d_balinc(ji,jj,jk,jpphd) * zrat_chd_phd
281                  ENDIF
282
283                  IF ( ( tracer_bkg(ji,jj,jk,jpzmi) > 0.0 ) .AND. ( tracer_bkg(ji,jj,jk,jpzme) > 0.0 ) ) THEN
284                     ! Zooplankton nitrogen split up based on existing ratios
285                     zfrac_zmi = tracer_bkg(ji,jj,jk,jpzmi) / (tracer_bkg(ji,jj,jk,jpzmi) + tracer_bkg(ji,jj,jk,jpzme))
286                     zfrac_zme = 1.0 - zfrac_zmi
287                     phyto2d_balinc(ji,jj,jk,jpzmi) = outincs(ji,jj,jk,i_tracer(3)) * zfrac_zmi
288                     phyto2d_balinc(ji,jj,jk,jpzme) = outincs(ji,jj,jk,i_tracer(3)) * zfrac_zme
289                  ENDIF
290
291                  ! Nitrogen nutrient straight from balancing scheme
292                  phyto2d_balinc(ji,jj,jk,jpdin) = outincs(ji,jj,jk,i_tracer(1))
293
294                  ! Nitrogen detritus straight from balancing scheme
295                  phyto2d_balinc(ji,jj,jk,jpdet) = outincs(ji,jj,jk,i_tracer(4))
296
297                  ! DIC straight from balancing scheme
298                  phyto2d_balinc(ji,jj,jk,jpdic) = outincs(ji,jj,jk,i_tracer(5))
299
300                  ! Alkalinity straight from balancing scheme
301                  phyto2d_balinc(ji,jj,jk,jpalk) = outincs(ji,jj,jk,i_tracer(6))
302
303                  ! Remove diatom silicate increment from nutrient silicate to conserve mass
304                  IF ( ( tracer_bkg(ji,jj,jk,jpsil) - phyto2d_balinc(ji,jj,jk,jppds) ) > 0.0 ) THEN
305                     phyto2d_balinc(ji,jj,jk,jpsil) = phyto2d_balinc(ji,jj,jk,jppds) * (-1.0)
306                  ENDIF
307
308                  IF ( ( tracer_bkg(ji,jj,jk,jpdet) > 0.0 ) .AND. ( tracer_bkg(ji,jj,jk,jpdtc) > 0.0 ) ) THEN
309                     ! Carbon detritus based on existing ratios
310                     zrat_dtc_det = tracer_bkg(ji,jj,jk,jpdtc) / tracer_bkg(ji,jj,jk,jpdet)
311                     phyto2d_balinc(ji,jj,jk,jpdtc) = phyto2d_balinc(ji,jj,jk,jpdet) * zrat_dtc_det
312                  ENDIF
313
314                  ! Do nothing with iron or oxygen for the time being
315                  phyto2d_balinc(ji,jj,jk,jpfer) = 0.0
316                  phyto2d_balinc(ji,jj,jk,jpoxy) = 0.0
317                 
318               END DO
319            END DO
320         END DO
321     
322      ELSE   ! No nitrogen balancing
323     
324         ! Initialise individual chlorophyll increments to zero
325         phyto2d_balinc(:,:,:,jpchn) = 0.0
326         phyto2d_balinc(:,:,:,jpchd) = 0.0
327         
328         ! Split up total surface chlorophyll increments
329         DO jj = 1, jpj
330            DO ji = 1, jpi
331               IF ( medusa_chl(ji,jj) > 0.0 ) THEN
332                  zfrac_chn = tracer_bkg(ji,jj,1,jpchn) / medusa_chl(ji,jj)
333                  zfrac_chd = 1.0 - zfrac_chn
334                  phyto2d_balinc(ji,jj,1,jpchn) = pinc_chltot(ji,jj) * zfrac_chn
335                  phyto2d_balinc(ji,jj,1,jpchd) = pinc_chltot(ji,jj) * zfrac_chd
336               ENDIF
337            END DO
338         END DO
339         
340         ! Propagate through mixed layer
341         DO jj = 1, jpj
342            DO ji = 1, jpi
343               !
344               jkmax = jpk-1
345               DO jk = jpk-1, 1, -1
346                  IF ( ( pmld(ji,jj) >  gdepw_n(ji,jj,jk)   ) .AND. &
347                     & ( pmld(ji,jj) <= gdepw_n(ji,jj,jk+1) ) ) THEN
348                     pmld(ji,jj) = gdepw_n(ji,jj,jk+1)
349                     jkmax = jk
350                  ENDIF
351               END DO
352               !
353               DO jk = 2, jkmax
354                  phyto2d_balinc(ji,jj,jk,jpchn) = phyto2d_balinc(ji,jj,1,jpchn)
355                  phyto2d_balinc(ji,jj,jk,jpchd) = phyto2d_balinc(ji,jj,1,jpchd)
356               END DO
357               !
358            END DO
359         END DO
360
361         ! Set other balancing increments to zero
362         phyto2d_balinc(:,:,:,jpphn) = 0.0
363         phyto2d_balinc(:,:,:,jpphd) = 0.0
364         phyto2d_balinc(:,:,:,jppds) = 0.0
365         phyto2d_balinc(:,:,:,jpzmi) = 0.0
366         phyto2d_balinc(:,:,:,jpzme) = 0.0
367         phyto2d_balinc(:,:,:,jpdin) = 0.0
368         phyto2d_balinc(:,:,:,jpsil) = 0.0
369         phyto2d_balinc(:,:,:,jpfer) = 0.0
370         phyto2d_balinc(:,:,:,jpdet) = 0.0
371         phyto2d_balinc(:,:,:,jpdtc) = 0.0
372         phyto2d_balinc(:,:,:,jpdic) = 0.0
373         phyto2d_balinc(:,:,:,jpalk) = 0.0
374         phyto2d_balinc(:,:,:,jpoxy) = 0.0
375
376      ENDIF
377     
378      ! If performing extra tidal mixing in the Indonesian Throughflow,
379      ! increments have been found to make the carbon cycle unstable
380      ! Therefore, mask these out
381      IF ( ln_tmx_itf ) THEN
382         DO jn = 1, jptra
383            DO jk = 1, jpk
384               phyto2d_balinc(:,:,jk,jn) = phyto2d_balinc(:,:,jk,jn) * ( 1.0 - mask_itf(:,:) )
385            END DO
386         END DO
387      ENDIF
388
389   END SUBROUTINE asm_phyto2d_bal_medusa
390
391#else
392   !!----------------------------------------------------------------------
393   !!   Default option : Empty routine
394   !!----------------------------------------------------------------------
395CONTAINS
396   SUBROUTINE asm_phyto2d_bal_medusa( ld_chltot,                      &
397      &                              pinc_chltot,                    &
398      &                              ld_chldia,                      &
399      &                              pinc_chldia,                    &
400      &                              ld_chlnon,                      &
401      &                              pinc_chlnon,                    &
402      &                              ld_phytot,                      &
403      &                              pinc_phytot,                    &
404      &                              ld_phydia,                      &
405      &                              pinc_phydia,                    &
406      &                              ld_phynon,                      &
407      &                              pinc_phynon,                    &
408      &                              pincper,                        &
409      &                              p_maxchlinc, ld_phytobal, pmld, &
410      &                              pgrow_avg_bkg, ploss_avg_bkg,   &
411      &                              phyt_avg_bkg, mld_max_bkg,      &
412      &                              tracer_bkg, phyto2d_balinc )
413      LOGICAL :: ld_chltot
414      REAL    :: pinc_chltot(:,:)
415      LOGICAL :: ld_chldia
416      REAL    :: pinc_chldia(:,:)
417      LOGICAL :: ld_chlnon
418      REAL    :: pinc_chlnon(:,:)
419      LOGICAL :: ld_phytot
420      REAL    :: pinc_phytot(:,:)
421      LOGICAL :: ld_phydia
422      REAL    :: pinc_phydia(:,:)
423      LOGICAL :: ld_phynon
424      REAL    :: pinc_phynon(:,:)
425      REAL    :: pincper
426      REAL    :: p_maxchlinc
427      LOGICAL :: ld_phytobal
428      REAL    :: pmld(:,:)
429      REAL    :: pgrow_avg_bkg(:,:)
430      REAL    :: ploss_avg_bkg(:,:)
431      REAL    :: phyt_avg_bkg(:,:)
432      REAL    :: mld_max_bkg(:,:)
433      REAL    :: tracer_bkg(:,:,:,:)
434      REAL    :: phyto2d_balinc(:,:,:,:)
435      WRITE(*,*) 'asm_phyto2d_bal_medusa: You should not have seen this print! error?'
436   END SUBROUTINE asm_phyto2d_bal_medusa
437#endif
438
439   !!======================================================================
440END MODULE asmphyto2dbal_medusa
Note: See TracBrowser for help on using the repository browser.