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

source: branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc_3dnitbal/NEMOGCM/NEMO/OPA_SRC/ASM/asmphyto3dbal_medusa.F90 @ 11990

Last change on this file since 11990 was 11990, checked in by dford, 4 years ago

Get the nitrogen balancing working with 3D chlorophyll increments.

File size: 21.2 KB
RevLine 
[11990]1MODULE asmphyto3dbal_medusa
[8428]2   !!======================================================================
[9432]3   !!                       ***  MODULE asmphyto2dbal_medusa  ***
4   !! Calculate increments to MEDUSA based on surface phyto2d increments
[8428]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   !!======================================================================
[9432]12   !! History :  3.6  ! 2017-08 (D. Ford)  Adapted from asmphyto2dbal_hadocc
[8428]13   !!----------------------------------------------------------------------
[8436]14#if defined key_asminc && defined key_medusa && defined key_foam_medusa
[8428]15   !!----------------------------------------------------------------------
16   !! 'key_asminc'          : assimilation increment interface
[8436]17   !! 'key_medusa'          : MEDUSA model
18   !! 'key_foam_medusa'     : MEDUSA extras for FOAM OBS and ASM
[8428]19   !!----------------------------------------------------------------------
[9432]20   !! asm_phyto2d_bal_medusa : routine to calculate increments to MEDUSA
[8428]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
[8485]25   USE zdftmx,        ONLY: ln_tmx_itf, &  ! Indonesian Throughflow
26      &                     mask_itf       ! tidal mixing mask
[8428]27   USE iom                                 ! i/o
[8436]28   USE sms_medusa                          ! MEDUSA parameters
29   USE par_medusa                          ! MEDUSA parameters
[8428]30   USE par_trc,       ONLY: jptra          ! Tracer parameters
31   USE bioanalysis                         ! Nitrogen balancing
32
33   IMPLICIT NONE
34   PRIVATE                   
35
[11990]36   PUBLIC asm_phyto3d_bal_medusa
[8428]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
[11990]71   SUBROUTINE asm_phyto3d_bal_medusa( pinc_chltot,                    &
[9432]72      &                               pincper,                        &
[11990]73      &                               p_maxchlinc,                    &
[9432]74      &                               pgrow_avg_bkg, ploss_avg_bkg,   &
[11990]75      &                               phyt_avg_bkg,                   &
76      &                               tracer_bkg, phyto3d_balinc )
[8428]77      !!---------------------------------------------------------------------------
[9432]78      !!                    ***  ROUTINE asm_phyto2d_bal_medusa  ***
[8428]79      !!
[9431]80      !! ** Purpose :   calculate increments to MEDUSA from 2d phytoplankton increments
[8428]81      !!
[9431]82      !! ** Method  :   average up MEDUSA to look like HadOCC
[8428]83      !!                call nitrogen balancing scheme
[8436]84      !!                separate back out to MEDUSA
[8428]85      !!
[9431]86      !! ** Action  :   populate phyto2d_balinc
[8428]87      !!
88      !! References :   Hemmings et al., 2008, J. Mar. Res.
89      !!                Ford et al., 2012, Ocean Sci.
90      !!---------------------------------------------------------------------------
91      !!
[11990]92      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk)       :: pinc_chltot    ! chltot increments
[9431]93      REAL(wp), INTENT(in   )                               :: pincper        ! Assimilation period
94      REAL(wp), INTENT(in   )                               :: p_maxchlinc    ! Max chl increment
[11990]95      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj,jpk)       :: pgrow_avg_bkg  ! Avg phyto growth
96      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj,jpk)       :: ploss_avg_bkg  ! Avg phyto loss
97      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj,jpk)       :: phyt_avg_bkg   ! Avg phyto
[8440]98      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj,jpk,jptra) :: tracer_bkg     ! State variables
[11990]99      REAL(wp), INTENT(  out), DIMENSION(jpi,jpj,jpk,jptra) :: phyto3d_balinc ! Balancing increments
[8428]100      !!
[8436]101      INTEGER                                               :: ji, jj, jk, jn ! Loop counters
[8428]102      INTEGER                                               :: jkmax          ! Loop index
103      INTEGER,                 DIMENSION(6)                 :: i_tracer       ! Tracer indices
[8436]104      REAL(wp)                                              :: n2be_p         ! N:biomass for total phy
105      REAL(wp)                                              :: n2be_z         ! N:biomass for total zoo
106      REAL(wp)                                              :: n2be_d         ! N:biomass for detritus
[9435]107      REAL(wp)                                              :: zfrac          ! Fraction
[8436]108      REAL(wp)                                              :: zfrac_chn      ! Fraction of jpchn
109      REAL(wp)                                              :: zfrac_chd      ! Fraction of jpchd
110      REAL(wp)                                              :: zfrac_phn      ! Fraction of jpphn
111      REAL(wp)                                              :: zfrac_phd      ! Fraction of jpphd
112      REAL(wp)                                              :: zfrac_zmi      ! Fraction of jpzmi
113      REAL(wp)                                              :: zfrac_zme      ! Fraction of jpzme
114      REAL(wp)                                              :: zrat_pds_phd   ! Ratio of jppds:jpphd
115      REAL(wp)                                              :: zrat_chd_phd   ! Ratio of jpchd:jpphd
116      REAL(wp)                                              :: zrat_chn_phn   ! Ratio of jpchn:jpphn
[9435]117      REAL(wp)                                              :: zrat_phn_chn   ! Ratio of jpphn:jpchn
118      REAL(wp)                                              :: zrat_phd_chd   ! Ratio of jpphd:jpchd
119      REAL(wp)                                              :: zrat_pds_chd   ! Ratio of jppds:jpchd
[8436]120      REAL(wp)                                              :: zrat_dtc_det   ! Ratio of jpdtc:jpdet
[11990]121      REAL(wp),                DIMENSION(jpi,jpj,jpk)       :: cchl_p         ! C:Chl for total phy
122      REAL(wp),                DIMENSION(jpi,jpj)           :: cchl_p_2d      ! C:Chl for total phy
[8428]123      REAL(wp),                DIMENSION(16)                :: modparm        ! Model parameters
124      REAL(wp),                DIMENSION(20)                :: assimparm      ! Assimilation parameters
125      REAL(wp),                DIMENSION(jpi,jpj,jpk,6)     :: bstate         ! Background state
[11990]126      REAL(wp),                DIMENSION(jpi,jpj,1,6)       :: bstate_2d      ! Background state
[8428]127      REAL(wp),                DIMENSION(jpi,jpj,jpk,6)     :: outincs        ! Balancing increments
[11990]128      REAL(wp),                DIMENSION(jpi,jpj,1,6)       :: outincs_2d     ! Balancing increments
[8428]129      REAL(wp),                DIMENSION(jpi,jpj,22)        :: diag           ! Depth-indep diagnostics
[11990]130      REAL(wp),                DIMENSION(jpi,jpj,1,22)      :: diag_fulldepth ! Full-depth diagnostics
131      REAL(wp),                DIMENSION(jpi,jpj)           :: pinc_chltot_2d
132      REAL(wp),                DIMENSION(jpi,jpj)           :: pgrow_avg_bkg_2d
133      REAL(wp),                DIMENSION(jpi,jpj)           :: ploss_avg_bkg_2d
134      REAL(wp),                DIMENSION(jpi,jpj)           :: phyt_avg_bkg_2d
135      REAL(wp),                DIMENSION(jpi,jpj,1)         :: tmask_2d
136      REAL(wp),                DIMENSION(jpi,jpj)           :: pmld_2d
137      REAL(wp),                DIMENSION(jpi,jpj)           :: mld_max_bkg_2d
[8428]138      !!---------------------------------------------------------------------------
139
[9435]140      ! If p_maxchlinc > 0 then cap total absolute chlorophyll increment at that value
141      IF ( p_maxchlinc > 0.0 ) THEN
[11990]142         DO jk = 1, jpk
[9435]143            DO jj = 1, jpj
144               DO ji = 1, jpi
[11990]145                  pinc_chltot(ji,jj,jk) = MAX( -1.0 * p_maxchlinc, MIN( pinc_chltot(ji,jj,jk), p_maxchlinc ) )
[9435]146               END DO
[9431]147            END DO
[11990]148         END DO
[8648]149      ENDIF
[9435]150
[11990]151      ! Set up model parameters to be passed into Hemmings balancing routine.
152      ! For now these are hardwired to the standard HadOCC parameter values
153      ! (except C:N ratios) as this is what the scheme was developed for.
154      ! Obviously, HadOCC and MEDUSA are rather different models, so this
155      ! isn't ideal, but there's not always direct analogues between the two
156      ! parameter sets, so it's the easiest way to get something running.
157      ! In the longer term, some serious MarMOT-based development is required.
158      modparm(1)  = 0.1                               ! grow_sat
159      modparm(2)  = 2.0                               ! psmax
160      modparm(3)  = 0.845                             ! par
161      modparm(4)  = 0.02                              ! alpha
162      modparm(5)  = 0.05                              ! resp_rate
163      modparm(6)  = 0.05                              ! pmort_rate
164      modparm(7)  = 0.01                              ! phyto_min
165      modparm(8)  = 0.05                              ! z_mort_1
166      modparm(9)  = 1.0                               ! z_mort_2
167      modparm(10) = ( xthetapn  + xthetapd  ) / 2.0   ! c2n_p
168      modparm(11) = ( xthetazmi + xthetazme ) / 2.0   ! c2n_z
169      modparm(12) = xthetad                           ! c2n_d
170      modparm(13) = 0.01                              ! graze_threshold
171      modparm(14) = 2.0                               ! holling_coef
172      modparm(15) = 0.5                               ! graze_sat
173      modparm(16) = 2.0                               ! graze_max
[8428]174
[11990]175      ! Set up assimilation parameters to be passed into balancing routine
176      ! Not sure what assimparm(1) is meant to be, but it doesn't get used
177      assimparm(2)  = balnutext
178      assimparm(3)  = balnutmin
179      assimparm(4)  = r
180      assimparm(5)  = beta_g
181      assimparm(6)  = beta_l
182      assimparm(7)  = beta_m
183      assimparm(8)  = a_g
184      assimparm(9)  = a_l
185      assimparm(10) = a_m
186      assimparm(11) = zfracb0
187      assimparm(12) = zfracb1
188      assimparm(13) = qrfmax
189      assimparm(14) = qafmax
190      assimparm(15) = zrfmax
191      assimparm(16) = zafmax
192      assimparm(17) = prfmax
193      assimparm(18) = incphymin
194      assimparm(19) = integnstep
195      assimparm(20) = pthreshold
[8428]196
[11990]197      ! Set up external tracer indices array bstate
198      i_tracer(1) = 1   ! nutrient
199      i_tracer(2) = 2   ! phytoplankton
200      i_tracer(3) = 3   ! zooplankton
201      i_tracer(4) = 4   ! detritus
202      i_tracer(5) = 5   ! DIC
203      i_tracer(6) = 6   ! Alkalinity
[8428]204
[11990]205      ! Set background state
206      bstate(:,:,:,i_tracer(1)) = tracer_bkg(:,:,:,jpdin)
207      bstate(:,:,:,i_tracer(2)) = tracer_bkg(:,:,:,jpphn) + tracer_bkg(:,:,:,jpphd)
208      bstate(:,:,:,i_tracer(3)) = tracer_bkg(:,:,:,jpzmi) + tracer_bkg(:,:,:,jpzme)
209      bstate(:,:,:,i_tracer(4)) = tracer_bkg(:,:,:,jpdet)
210      bstate(:,:,:,i_tracer(5)) = tracer_bkg(:,:,:,jpdic)
211      bstate(:,:,:,i_tracer(6)) = tracer_bkg(:,:,:,jpalk)
[8428]212
[11990]213      ! Calculate carbon to chlorophyll ratio for combined phytoplankton
214      ! and nitrogen to biomass equivalent for PZD
215      ! Hardwire nitrogen mass to 14.01 for now as it doesn't seem to be set in MEDUSA
216      cchl_p(:,:,:) = 0.0
217      DO jk = 1, jpk
[8436]218         DO jj = 1, jpj
219            DO ji = 1, jpi
[11990]220               IF ( ( tracer_bkg(ji,jj,jk,jpchn) + tracer_bkg(ji,jj,jk,jpchd ) ) .GT. 0.0 ) THEN
221                  cchl_p(ji,jj,jk) = xmassc * ( ( tracer_bkg(ji,jj,jk,jpphn) * xthetapn ) +      &
222                     &                       ( tracer_bkg(ji,jj,jk,jpphd) * xthetapd )   ) /  &
223                     &            ( tracer_bkg(ji,jj,jk,jpchn) + tracer_bkg(ji,jj,jk,jpchd ) )
[8436]224               ENDIF
225            END DO
226         END DO
[11990]227      END DO
228      n2be_p = 14.01 + ( xmassc * ( ( xthetapn  + xthetapd  ) / 2.0 ) )
229      n2be_z = 14.01 + ( xmassc * ( ( xthetazmi + xthetazme ) / 2.0 ) )
230      n2be_d = 14.01 + ( xmassc * xthetad )
[8436]231
[11990]232      pmld_2d(:,:)        = 0.5
233      mld_max_bkg_2d(:,:) = 0.5
234
235      DO jk = 1, jpk
236
237         tmask_2d(:,:,1)       = tmask(:,:,jk)
238         pinc_chltot_2d(:,:)   = pinc_chltot(:,:,jk)
239         cchl_p_2d(:,:)        = cchl_p(:,:,jk)
240         phyt_avg_bkg_2d(:,:)  = phyt_avg_bkg(:,:,jk)
241         pgrow_avg_bkg_2d(:,:) = pgrow_avg_bkg(:,:,jk)
242         ploss_avg_bkg_2d(:,:) = ploss_avg_bkg(:,:,jk)
243         bstate_2d(:,:,1,:)    = bstate(:,:,jk,:)
244         outincs_2d(:,:,:,:)   = 0.0
245         
[8428]246         ! Call nitrogen balancing routine
[11990]247         CALL bio_analysis( jpi, jpj, 1, gdepw_n(:,:,2), i_tracer, modparm,   &
[8436]248            &               n2be_p, n2be_z, n2be_d, assimparm,                      &
[11990]249            &               INT(pincper), 1, INT(SUM(tmask_2d,3)), tmask_2d(:,:,:),       &
250            &               pmld_2d(:,:), mld_max_bkg_2d(:,:), pinc_chltot_2d(:,:), cchl_p_2d(:,:), &
251            &               nbal_active, phyt_avg_bkg_2d(:,:),                         &
252            &               gl_active, pgrow_avg_bkg_2d(:,:), ploss_avg_bkg_2d(:,:),      &
[8436]253            &               subsurf_active, deepneg_active,                         &
254            &               deeppos_active, nutprof_active,                         &
[11990]255            &               bstate_2d, outincs_2d,                                        &
[8436]256            &               diag_active, diag,                                      &
[8428]257            &               diag_fulldepth_active, diag_fulldepth )
[8436]258
[11990]259         outincs(:,:,jk,:) = outincs_2d(:,:,1,:)
[9435]260
[11990]261      END DO
[8436]262
[11990]263      ! Loop over each grid point partioning the increments
264      phyto3d_balinc(:,:,:,:) = 0.0
265      DO jk = 1, jpk
266         DO jj = 1, jpj
267            DO ji = 1, jpi
[8436]268
[11990]269               ! Phytoplankton
270               IF ( ( tracer_bkg(ji,jj,jk,jpphn) > 0.0 ) .AND. &
271                  & ( tracer_bkg(ji,jj,jk,jpphd) > 0.0 ) .AND. &
272                  & ( pinc_chltot(ji,jj,jk) /= 0.0 ) ) THEN
273                  ! Phytoplankton nitrogen split up based on existing ratios
274                  zfrac_phn = tracer_bkg(ji,jj,jk,jpphn) / &
275                     &        (tracer_bkg(ji,jj,jk,jpphn) + tracer_bkg(ji,jj,jk,jpphd))
276                  zfrac_phd = tracer_bkg(ji,jj,jk,jpphd) / &
277                     &        (tracer_bkg(ji,jj,jk,jpphn) + tracer_bkg(ji,jj,jk,jpphd))
[8436]278
[11990]279                  ! Phytoplankton silicate split up based on existing ratios
280                  zrat_pds_phd = tracer_bkg(ji,jj,jk,jppds) / tracer_bkg(ji,jj,jk,jpphd)
[8436]281
[11990]282                  ! Chlorophyll split up based on existing ratios to phytoplankton nitrogen
283                  ! Not using pinc_chltot directly as it's only 2D
284                  ! This method should give same results at surface as splitting pinc_chltot would
285                  zrat_chn_phn = tracer_bkg(ji,jj,jk,jpchn) / tracer_bkg(ji,jj,jk,jpphn)
286                  zrat_chd_phd = tracer_bkg(ji,jj,jk,jpchd) / tracer_bkg(ji,jj,jk,jpphd)
[8436]287
[11990]288                  phyto3d_balinc(ji,jj,jk,jpphn) = outincs(ji,jj,jk,i_tracer(2)) * zfrac_phn
289                  phyto3d_balinc(ji,jj,jk,jpphd) = outincs(ji,jj,jk,i_tracer(2)) * zfrac_phd
290                  phyto3d_balinc(ji,jj,jk,jppds) = phyto3d_balinc(ji,jj,jk,jpphd) * zrat_pds_phd
291                  phyto3d_balinc(ji,jj,jk,jpchn) = phyto3d_balinc(ji,jj,jk,jpphn) * zrat_chn_phn
292                  phyto3d_balinc(ji,jj,jk,jpchd) = phyto3d_balinc(ji,jj,jk,jpphd) * zrat_chd_phd
293               ENDIF
[8436]294
[11990]295               ! Zooplankton nitrogen split up based on existing ratios
296               IF ( ( tracer_bkg(ji,jj,jk,jpzmi) > 0.0 ) .AND. ( tracer_bkg(ji,jj,jk,jpzme) > 0.0 ) ) THEN
297                  zfrac_zmi = tracer_bkg(ji,jj,jk,jpzmi) / &
298                     &        (tracer_bkg(ji,jj,jk,jpzmi) + tracer_bkg(ji,jj,jk,jpzme))
299                  zfrac_zme = tracer_bkg(ji,jj,jk,jpzme) / &
300                     &        (tracer_bkg(ji,jj,jk,jpzmi) + tracer_bkg(ji,jj,jk,jpzme))
301                  phyto3d_balinc(ji,jj,jk,jpzmi) = outincs(ji,jj,jk,i_tracer(3)) * zfrac_zmi
302                  phyto3d_balinc(ji,jj,jk,jpzme) = outincs(ji,jj,jk,i_tracer(3)) * zfrac_zme
303               ENDIF
[8436]304
[11990]305               ! Nitrogen nutrient straight from balancing scheme
306               phyto3d_balinc(ji,jj,jk,jpdin) = outincs(ji,jj,jk,i_tracer(1))
[8436]307
[11990]308               ! Nitrogen detritus straight from balancing scheme
309               phyto3d_balinc(ji,jj,jk,jpdet) = outincs(ji,jj,jk,i_tracer(4))
310
311               ! DIC straight from balancing scheme
312               phyto3d_balinc(ji,jj,jk,jpdic) = outincs(ji,jj,jk,i_tracer(5))
313
314               ! Alkalinity straight from balancing scheme
315               phyto3d_balinc(ji,jj,jk,jpalk) = outincs(ji,jj,jk,i_tracer(6))
316
317               ! Remove diatom silicate increment from nutrient silicate to conserve mass
318               IF ( ( tracer_bkg(ji,jj,jk,jpsil) - phyto3d_balinc(ji,jj,jk,jppds) ) > 0.0 ) THEN
319                  phyto3d_balinc(ji,jj,jk,jpsil) = phyto3d_balinc(ji,jj,jk,jppds) * (-1.0)
[8436]320               ENDIF
[11990]321
322               ! Carbon detritus based on existing ratios
323               IF ( ( tracer_bkg(ji,jj,jk,jpdet) > 0.0 ) .AND. ( tracer_bkg(ji,jj,jk,jpdtc) > 0.0 ) ) THEN
324                  zrat_dtc_det = tracer_bkg(ji,jj,jk,jpdtc) / tracer_bkg(ji,jj,jk,jpdet)
325                  phyto3d_balinc(ji,jj,jk,jpdtc) = phyto3d_balinc(ji,jj,jk,jpdet) * zrat_dtc_det
326               ENDIF
327
328               ! Do nothing with iron or oxygen for the time being
329               phyto3d_balinc(ji,jj,jk,jpfer) = 0.0
330               phyto3d_balinc(ji,jj,jk,jpoxy) = 0.0
331
[8436]332            END DO
333         END DO
[11990]334      END DO
[8485]335     
336      ! If performing extra tidal mixing in the Indonesian Throughflow,
337      ! increments have been found to make the carbon cycle unstable
338      ! Therefore, mask these out
339      IF ( ln_tmx_itf ) THEN
340         DO jn = 1, jptra
341            DO jk = 1, jpk
[11990]342               phyto3d_balinc(:,:,jk,jn) = phyto3d_balinc(:,:,jk,jn) * ( 1.0 - mask_itf(:,:) )
[8485]343            END DO
344         END DO
345      ENDIF
[8428]346
[11990]347   END SUBROUTINE asm_phyto3d_bal_medusa
[8428]348
349#else
350   !!----------------------------------------------------------------------
351   !!   Default option : Empty routine
352   !!----------------------------------------------------------------------
353CONTAINS
[11990]354   SUBROUTINE asm_phyto3d_bal_medusa(pinc_chltot,                    &
[9431]355      &                              pincper,                        &
[11990]356      &                              p_maxchlinc,                    &
[9431]357      &                              pgrow_avg_bkg, ploss_avg_bkg,   &
[11990]358      &                              phyt_avg_bkg,                   &
359      &                              tracer_bkg, phyto3d_balinc )
360      REAL    :: pinc_chltot(:,:,:)
[9431]361      REAL    :: pincper
362      REAL    :: p_maxchlinc
[11990]363      REAL    :: pgrow_avg_bkg(:,:,:)
364      REAL    :: ploss_avg_bkg(:,:,:)
365      REAL    :: phyt_avg_bkg(:,:,:)
[8440]366      REAL    :: tracer_bkg(:,:,:,:)
[9431]367      REAL    :: phyto2d_balinc(:,:,:,:)
[11990]368      WRITE(*,*) 'asm_phyto3d_bal_medusa: You should not have seen this print! error?'
369   END SUBROUTINE asm_phyto3d_bal_medusa
[8428]370#endif
371
372   !!======================================================================
[11990]373END MODULE asmphyto3dbal_medusa
Note: See TracBrowser for help on using the repository browser.