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.
Changeset 7894 for branches/NERC/dev_r5518_NOC_MEDUSA_Stable – NEMO

Ignore:
Timestamp:
2017-04-11T13:58:38+02:00 (7 years ago)
Author:
jpalmier
Message:

JPALM -- 11-04-2017 -- MEDUSA spring tidy-up refreshning session

Location:
branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/mocsy_mainmod.F90

    r5841 r7894  
    618618  !       -> 'm10' means use Millero (2010) formulation for K1 & K2 (see Dickson et al., 2007) 
    619619  !                **** Valid for 0 < T < 50°C and 1 < S < 50 psu 
     620  !       -> 'w14' means use Waters (2014) formulation for K1 & K2 (see Dickson et al., 2007) 
     621  !                **** Valid for 0 < T < 50°C and 1 < S < 50 psu 
    620622  !     ----------- 
    621623  !     optKf: 
     
    675677!f2py character*2 optional, intent(in) :: optKf='pf' 
    676678  CHARACTER(2), OPTIONAL, INTENT(in) :: optKf 
    677   !> for K1,K2 choose either \b 'l' (Lueker et al., 2000) or \b 'm10' (Millero, 2010)  
     679  !> for K1,K2 choose either \b 'l' (Lueker et al., 2000) or \b 'm10' (Millero, 2010) or \b 'w14' (Waters et al., 2014) 
    678680!f2py character*3 optional, intent(in) :: optK1K2='l' 
    679681  CHARACTER(3), OPTIONAL, INTENT(in) :: optK1K2 
     
    946948                  - 0.01781d0*s + 0.0001122d0*s2)) 
    947949        ELSEIF (trim(opK1K2) == 'm10') THEN 
    948 !         Millero (2010, Mar. Fresh Wat. Res.) (total pH scale) 
    949 !         pK1o = 6320.813d0*invtk + 19.568224d0*dlogtk -126.34048d0 
    950 !         ma1 = 13.4051d0*sqrts + 0.03185d0*s - (5.218e-5)*s2 
    951 !         mb1 = -531.095d0*sqrts - 5.7789d0*s 
    952 !         mc1 = -2.0663d0*sqrts 
    953 !         pK1 = pK1o + ma1 + mb1*invtk + mc1*dlogtk 
    954 !         K1(i) = 10.0d0**(-pK1)  
    955  
    956 !         pK2o = 5143.692d0*invtk + 14.613358d0*dlogtk -90.18333d0 
    957 !         ma2 = 21.5724d0*sqrts + 0.1212d0*s - (3.714e-4)*s2 
    958 !         mb2 = -798.292d0*sqrts - 18.951d0*s 
    959 !         mc2 = -3.403d0*sqrts 
    960 !         pK2 = pK2o + ma2 + mb2*invtk + mc2*dlogtk 
    961 !         K2(i) = 10.0d0**(-pK2) 
    962  
    963950!         Millero (2010, Mar. Fresh Wat. Res.) (seawater pH scale) 
    964951          pK1o = 6320.813d0*invtk + 19.568224d0*dlogtk -126.34048d0 
     
    975962          pK2 = pK2o + ma2 + mb2*invtk + mc2*dlogtk 
    976963          K2(i) = 10.0d0**(-pK2) 
     964        ELSEIF (trim(opK1K2) == 'w14') THEN 
     965!         Waters, Millero, Woosley (Mar. Chem., 165, 66-67, 2014) (seawater scale) 
     966          pK1o = 6320.813d0*invtk + 19.568224d0*dlogtk -126.34048d0 
     967          ma1 = 13.409160d0*sqrts + 0.031646d0*s - (5.1895e-5)*s2 
     968          mb1 = -531.3642d0*sqrts - 5.713d0*s 
     969          mc1 = -2.0669166d0*sqrts 
     970          pK1 = pK1o + ma1 + mb1*invtk + mc1*dlogtk 
     971          K1(i) = 10.0d0**(-pK1)  
     972 
     973          pK2o = 5143.692d0*invtk + 14.613358d0*dlogtk -90.18333d0 
     974          ma2 = 21.225890d0*sqrts + 0.12450870d0*s - (3.7243e-4_r8)*s2 
     975          mb2 = -779.3444d0*sqrts - 19.91739d0*s 
     976          mc2 = -3.3534679d0*sqrts 
     977          pK2 = pK2o + ma2 + mb2*invtk + mc2*dlogtk 
     978          K2(i) = 10.0d0**(-pK2) 
    977979        ELSE 
    978            PRINT *, "optK1K2 must be either 'l' or 'm10'" 
     980           PRINT *, "optK1K2 must be either 'l' or 'm10', or 'w14'" 
    979981           STOP 
    980982        ENDIF 
     
    16291631! Local variables 
    16301632  REAL(kind=wp) :: ssal, salk, sdic, ssil, sphos 
    1631  
    16321633  REAL(kind=wp) :: tempot, tempis68, tempot68 
    1633 ! REAL(kind=wp) :: dtempot, dtempot68 
    16341634  REAL(kind=wp) :: drho 
    16351635 
     
    19541954  !> hydrostatic pressure [db] 
    19551955  REAL(kind=wp), INTENT(in), DIMENSION(N) :: p 
    1956 !f2py optional , depend(pCO2) :: n=len(pCO2) 
    19571956 
    19581957! OUTPUT variables: 
     
    20212020  !> hydrostatic pressure [db] 
    20222021  REAL(kind=wp), INTENT(in), DIMENSION(N) :: p 
    2023 !f2py optional , depend(pCO2) :: n=len(pCO2) 
    20242022 
    20252023! OUTPUT variables: 
  • branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/mocsy_wrapper.F90

    r7611 r7894  
    66   !! History : 
    77   !!  -   !  2015-06  (A. Yool)             added for UKESM project 
    8    !!---------------------------------------------------------------------- 
    9 #if defined key_medusa && defined key_roam && defined key_mocsy 
     8   !!  -   !  2017-04  (A. Yool)             alter optK1K2 to 'w14' option 
     9   !!---------------------------------------------------------------------- 
     10#if defined key_medusa && defined key_roam 
    1011   !!---------------------------------------------------------------------- 
    1112   !!                                        MEDUSA carbonate chemistry 
    1213   !!---------------------------------------------------------------------- 
    13    !!   trc_co2_medusa        :   
     14   !!   mocsy_wrapper 
    1415   !!---------------------------------------------------------------------- 
    1516 
     
    218219! present) 
    219220! 
     221!======================================================================= 
     222! 
     223! AXY (05/04/17): alter options to include optK1K2 = 'w14' 
     224! 
     225! In conversation with Jim Orr, Waters (2014) is now the  
     226! preferred option for optK1K2 in the case of global scale  
     227! simulations since this formulation works over broader ranges 
     228! of temperature (0 < T < 50) and salinity (1 < S < 50). 
     229! 
     230! NOTE: *contrary* to the notice above, MEDUSA has now been 
     231! revised to remove the PML carbonate chemistry routine as part 
     232! of a wider code review. This routine is not anticipated to be  
     233! used again, and has several out of date parameterisations  
     234! relative to MOCSY. As a result, key_mocsy is no longer required. 
     235! 
    220236        USE mocsy_singledouble 
    221237        IMPLICIT NONE 
     
    249265!  CONFIGURE OPTIONS 
    250266!> ====================================================================== 
    251 !> OPTIONS: see complete documentation in 'vars' subroutine 
     267!> OPTIONS: see complete documentation in 'vars' subroutine (in mocsy_mainmod.F90) 
     268!> AXY (05/04/17): optK1K2 switched from 'm10' to 'w14' 
    252269!> Typical options for MODELS 
    253270   optCON  = 'mol/m3' ! input concentrations are in MOL/M3 
     
    255272   optP    = 'm'      ! input variable 'depth' is in METERS 
    256273   optB    = 'l10'    ! Lee et al. (2010) formulation for total boron 
    257    optK1K2 = 'l'      ! Lueker et al. (2000) formulations for K1 & K2 (best practices) 
     274   optK1K2 = 'w14'    ! Lueker et al. (2000) formulations for K1 & K2 (best practices) 
    258275   optKf   = 'dg'     ! Dickson & Riley (1979) formulation for Kf (recommended by Dickson & Goyet, 1994) 
     276!> optK1K2 = 'l'      ! Lueker et al. (2000) formulations for K1 & K2 (best practices) 
     277!> optKf   = 'dg'     ! Dickson & Riley (1979) formulation for Kf (recommended by Dickson & Goyet, 1994) 
    259278 
    260279!> ====================================================================== 
  • branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/sms_medusa.F90

    r7766 r7894  
    4949   REAL(wp) ::  xthetam   !:  maximum Chl to C ratio for non-diatoms       
    5050   REAL(wp) ::  xthetamd  !:  maximum Chl to C ratio for diatoms     
    51    REAL(wp) ::  jq10      !:  specific Q10 value (jphy==2)     
     51   REAL(wp) ::  xq10      !:  specific Q10 value (jphy==2)     
    5252!! 
    5353!! Diatom silicon parameters 
     
    239239   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: za_dms_din  !: 2D avg DIN   (after) 
    240240!! 
    241 !! 2D fields needing to be knows at first tstp for coupling with atm - UKEMS(Jpalm,14-06-2016) 
     241!! 2D fields needing to be knows at first tstp for coupling with atm - UKESM (Jpalm,14-06-2016) 
    242242   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: zb_co2_flx  !: 2D avg fx co2 (before) 
    243243   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: zn_co2_flx  !: 2D avg fx co2 (now) 
     
    272272   !! AXY (19/07/12): add this to permit river fluxes to be added below top box 
    273273   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   friver_dep !: where river fluxes added 
    274  
    275 #if defined key_roam 
    276 !!---------------------------------------------------------------------- 
    277 !! Atmospheric pCO2 data (1859 to 2100 inclusive) 
    278 !!---------------------------------------------------------------------- 
    279 !! 
    280    REAL(wp), DIMENSION(242)         ::   hist_pco2 !: pCO2 
    281  
    282 # if defined key_rcp26 
    283       !! UKMO, run AJKKH + KAAEC, RCP 2.6, pCO2 time evolution 
    284       DATA hist_pco2 / 286.0230, 286.1730, 286.3230, 286.4480, 286.5730, & 
    285       & 286.7230, 286.8480, 286.9480, 287.0480, 287.1730, & 
    286       & 287.3230, 287.4730, 287.6480, 287.8480, 288.0730, & 
    287       & 288.3480, 288.6480, 288.9730, 289.3470, 289.7470, & 
    288       & 290.1730, 290.6470, 291.1470, 291.6220, 292.0720, & 
    289       & 292.5220, 292.9220, 293.2470, 293.5220, 293.7470, & 
    290       & 293.9470, 294.1220, 294.2720, 294.4220, 294.5470, & 
    291       & 294.6470, 294.7470, 294.8470, 294.9710, 295.1710, & 
    292       & 295.4460, 295.7470, 296.0720, 296.4210, 296.7710, & 
    293       & 297.1460, 297.5710, 298.0210, 298.4460, 298.8460, & 
    294       & 299.2460, 299.6450, 300.0210, 300.3710, 300.7200, & 
    295       & 301.0450, 301.3460, 301.6710, 302.0200, 302.3450, & 
    296       & 302.6450, 302.9700, 303.3450, 303.7200, 304.0700, & 
    297       & 304.4700, 304.9200, 305.3440, 305.7700, 306.2450, & 
    298       & 306.7190, 307.1700, 307.6440, 308.1190, 308.5440, & 
    299       & 308.9440, 309.3440, 309.6940, 309.9440, 310.1190, & 
    300       & 310.2440, 310.3190, 310.3190, 310.2440, 310.1440, & 
    301       & 310.0690, 310.0440, 310.0690, 310.1440, 310.2690, & 
    302       & 310.4440, 310.6940, 311.0430, 311.4440, 311.8690, & 
    303       & 312.3680, 312.9430, 313.5430, 314.1680, 314.7900, & 
    304       & 315.4430, 316.2150, 317.0170, 317.7370, 318.3400, & 
    305       & 318.8680, 319.5900, 320.5890, 321.5470, 322.5770, & 
    306       & 323.8440, 324.9260, 325.7960, 327.0810, 328.6180, & 
    307       & 329.6830, 330.5250, 331.6880, 333.2120, 334.7870, & 
    308       & 336.4640, 338.2990, 339.6660, 340.7310, 342.1360, & 
    309       & 343.7200, 345.2200, 346.7350, 348.5820, 350.6740, & 
    310       & 352.4230, 353.7910, 354.9530, 355.8210, 356.7130, & 
    311       & 358.0630, 359.7720, 361.3970, 363.0900, 365.2560, & 
    312       & 367.2810, 368.7980, 370.4000, 372.4550, 374.6920, & 
    313       & 376.7440, 378.7440, 380.7580, 382.7080, 384.7300, & 
    314       & 386.9310, 389.2150, 391.4910, 393.7710, 396.0460, & 
    315       & 398.3240, 400.6080, 402.8950, 405.1780, 407.4550, & 
    316       & 409.7260, 411.9930, 414.2500, 416.4410, 418.5280, & 
    317       & 420.5250, 422.4390, 424.2720, 426.0200, 427.6750, & 
    318       & 429.2360, 430.7050, 432.0850, 433.3580, 434.5140, & 
    319       & 435.5740, 436.5490, 437.4420, 438.2550, 438.9810, & 
    320       & 439.6110, 440.1430, 440.5770, 440.9450, 441.2660, & 
    321       & 441.5410, 441.7840, 442.0050, 442.2040, 442.3780, & 
    322       & 442.5210, 442.6200, 442.6720, 442.6810, 442.6540, & 
    323       & 442.5830, 442.4670, 442.3270, 442.1680, 441.9960, & 
    324       & 441.8060, 441.5930, 441.3440, 441.0540, 440.7230, & 
    325       & 440.3510, 439.9300, 439.4650, 438.9730, 438.4630, & 
    326       & 437.9400, 437.4020, 436.8400, 436.2640, 435.6850, & 
    327       & 435.1030, 434.5160, 433.9170, 433.3060, 432.7010, & 
    328       & 432.1110, 431.5380, 430.9810, 430.4320, 429.8860, & 
    329       & 429.3370, 428.7810, 428.2220, 427.6490, 427.0660, & 
    330       & 426.4890, 425.9270, 425.3840, 424.8610, 424.3540, & 
    331       & 423.8540, 423.3540, 422.8530, 422.3510, 421.8410, & 
    332       & 421.3250, 420.8190 / 
    333 # else 
    334       !! UKMO, run AJKKH + KAAEF, RCP 8.5, pCO2 time evolution 
    335       DATA hist_pco2 / 286.0230, 286.1730, 286.3230, 286.4480, 286.5730, & 
    336       & 286.7230, 286.8480, 286.9480, 287.0480, 287.1730, & 
    337       & 287.3230, 287.4730, 287.6480, 287.8480, 288.0730, & 
    338       & 288.3480, 288.6480, 288.9730, 289.3470, 289.7470, & 
    339       & 290.1730, 290.6470, 291.1470, 291.6220, 292.0720, & 
    340       & 292.5220, 292.9220, 293.2470, 293.5220, 293.7470, & 
    341       & 293.9470, 294.1220, 294.2720, 294.4220, 294.5470, & 
    342       & 294.6470, 294.7470, 294.8470, 294.9710, 295.1710, & 
    343       & 295.4460, 295.7470, 296.0720, 296.4210, 296.7710, & 
    344       & 297.1460, 297.5710, 298.0210, 298.4460, 298.8460, & 
    345       & 299.2460, 299.6450, 300.0210, 300.3710, 300.7200, & 
    346       & 301.0450, 301.3460, 301.6710, 302.0200, 302.3450, & 
    347       & 302.6450, 302.9700, 303.3450, 303.7200, 304.0700, & 
    348       & 304.4700, 304.9200, 305.3440, 305.7700, 306.2450, & 
    349       & 306.7190, 307.1700, 307.6440, 308.1190, 308.5440, & 
    350       & 308.9440, 309.3440, 309.6940, 309.9440, 310.1190, & 
    351       & 310.2440, 310.3190, 310.3190, 310.2440, 310.1440, & 
    352       & 310.0690, 310.0440, 310.0690, 310.1440, 310.2690, & 
    353       & 310.4440, 310.6940, 311.0430, 311.4440, 311.8690, & 
    354       & 312.3680, 312.9430, 313.5430, 314.1680, 314.7900, & 
    355       & 315.4430, 316.2150, 317.0170, 317.7370, 318.3400, & 
    356       & 318.8680, 319.5900, 320.5890, 321.5470, 322.5770, & 
    357       & 323.8440, 324.9260, 325.7960, 327.0810, 328.6180, & 
    358       & 329.6830, 330.5250, 331.6880, 333.2120, 334.7870, & 
    359       & 336.4640, 338.2990, 339.6660, 340.7310, 342.1360, & 
    360       & 343.7200, 345.2200, 346.7350, 348.5820, 350.6740, & 
    361       & 352.4230, 353.7910, 354.9530, 355.8210, 356.7130, & 
    362       & 358.0630, 359.7720, 361.3970, 363.0900, 365.2560, & 
    363       & 367.2810, 368.7980, 370.4000, 372.4550, 374.6920, & 
    364       & 376.7440, 378.7440, 380.7580, 382.7080, 384.7300, & 
    365       & 386.9420, 389.2540, 391.5670, 393.9370, 396.3920, & 
    366       & 398.9320, 401.5550, 404.2550, 407.0220, 409.8530, & 
    367       & 412.7470, 415.7050, 418.7210, 421.7880, 424.9180, & 
    368       & 428.1200, 431.3970, 434.7470, 438.1650, 441.6410, & 
    369       & 445.1700, 448.7530, 452.3920, 456.0950, 459.8810, & 
    370       & 463.7680, 467.7660, 471.8750, 476.0960, 480.4210, & 
    371       & 484.8390, 489.3470, 493.9430, 498.6400, 503.4380, & 
    372       & 508.3410, 513.3630, 518.5160, 523.8050, 529.2290, & 
    373       & 534.7780, 540.4450, 546.2230, 552.1120, 558.1110, & 
    374       & 564.2110, 570.4130, 576.7390, 583.1990, 589.7980, & 
    375       & 596.5390, 603.4110, 610.4060, 617.4940, 624.6500, & 
    376       & 631.8800, 639.1750, 646.5360, 653.9800, 661.5230, & 
    377       & 669.1840, 676.9570, 684.8290, 692.7790, 700.7690, & 
    378       & 708.8050, 716.8870, 725.0020, 733.1770, 741.3900, & 
    379       & 749.6700, 758.0480, 766.5050, 775.0350, 783.6110, & 
    380       & 792.2200, 800.8740, 809.5680, 818.2760, 827.0090, & 
    381       & 835.8020, 844.6550, 853.5730, 862.5690, 871.6190, & 
    382       & 880.7020, 889.8240, 898.9590, 908.1270, 917.3080, & 
    383       & 926.4960, 935.7040 / 
    384 # endif 
    385 #endif 
    386274 
    387275!!---------------------------------------------------------------------- 
     
    481369         &      za_dms_din(jpi,jpj)  ,                           STAT=ierr(4) ) 
    482370      !* 2D fields needing to be knows at first tstp for coupling with atm - 
    483       !UKEMSi (Jpalm,14-06-2016)  
     371      !UKESM (Jpalm,14-06-2016)  
    484372      ALLOCATE( zb_co2_flx(jpi,jpj)  , zn_co2_flx(jpi,jpj)  ,       & 
    485373         &      za_co2_flx(jpi,jpj)  ,                              & 
  • branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcavg_medusa.F90

    r6715 r7894  
    5151      !! This functionality was originally added to support the 
    5252      !! calculation of surface DMS concentrations - and was done so 
    53       !! within the trcbio_meduse.F90 routine - but was moved to 
     53      !! within the trcbio_medusa.F90 routine - but was moved to 
    5454      !! this separate module so that its calculations could be used 
    5555      !! to inform MEDUSA's submarine irradiance field 
  • branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcbio_medusa.F90

    r7880 r7894  
    2020   !!  -   !  2015-10  (J. Palm)              Update for diag outputs through iom_use   
    2121   !!  -   !  2016-11  (A. Yool)              Updated diags for CMIP6 
     22   !!  -   !  2017-03  (A. Yool)              Updated DMS for DIN limitation 
     23   !!  -   !  2017-04  (A. Yool)              Simplify code to remove unused options, etc. 
     24   !!                                         - remove ln_diatrc, etc. code 
     25   !!                                         - remove PML carbonate chemistry code 
     26   !!                                         - remove defunct iron scavenging code 
     27   !!                                         - remove defunct debug diagnostic code 
    2228   !!---------------------------------------------------------------------- 
    2329   !! 
     
    2632   !! Updates for the ROAM project include: 
    2733   !!   - addition of DIC, alkalinity, detrital carbon and oxygen tracers 
    28    !!   - addition of air-sea fluxes of CO2 and oxygen 
     34   !!   - addition of air-sea fluxes of CO2 and oxygen (updated with MOCSY) 
    2935   !!   - periodic (monthly) calculation of full 3D carbonate chemistry  
    3036   !!   - detrital C:N ratio now free to evolve dynamically 
     
    3743   !!   - switch for ballast vs. Martin vs. Henson fast detritus remin. 
    3844   !!   - per GMD referee remarks, xfdfrac3 introduced for grazed PDS 
    39    !!---------------------------------------------------------------------- 
    40 #endif 
    4145   !! 
    42 #if defined key_mocsy 
    43    !!---------------------------------------------------------------------- 
    4446   !! Updates with the addition of MOCSY include: 
    4547   !!   - option to use PML or MOCSY carbonate chemistry (the latter is  
     
    7577# if defined key_roam 
    7678      USE gastransfer 
    77 #  if defined key_mocsy 
    7879      USE mocsy_wrapper 
    79 #  else 
    80       USE trcco2_medusa 
    8180#  endif 
    8281      USE trcoxy_medusa 
     
    111110CONTAINS 
    112111 
    113    SUBROUTINE trc_bio_medusa( kt ) 
    114       !!--------------------------------------------------------------------- 
    115       !!                     ***  ROUTINE trc_bio  *** 
    116       !! 
    117       !! ** Purpose :   compute the now trend due to biogeochemical processes 
    118       !!              and add it to the general trend of passive tracers equations 
    119       !! 
    120       !! ** Method  :   each now biological flux is calculated in function of now 
    121       !!              concentrations of tracers. 
    122       !!              depending on the tracer, these fluxes are sources or sinks. 
    123       !!              the total of the sources and sinks for each tracer 
    124       !!              is added to the general trend. 
    125       !!         
    126       !!                      tra = tra + zf...tra - zftra... 
    127       !!                                     |         | 
    128       !!                                     |         | 
    129       !!                                  source      sink 
    130       !!         
    131       !!              IF 'key_trc_diabio' defined , the biogeochemical trends 
    132       !!              for passive tracers are saved for futher diagnostics. 
    133       !!--------------------------------------------------------------------- 
    134       !! 
    135       !! 
    136       !!----------------------------------------------------------------------             
    137       !! Variable conventions 
    138       !!---------------------------------------------------------------------- 
    139       !! 
    140       !! names: z*** - state variable  
    141       !!        f*** - function (or temporary variable used in part of a function) 
    142       !!        x*** - parameter 
    143       !!        b*** - right-hand part (sources and sinks) 
    144       !!        i*** - integer variable (usually used in yes/no flags) 
    145       !! 
    146       !! time (integer timestep) 
    147       INTEGER, INTENT( in ) ::    kt 
    148       !! 
    149       !! spatial array indices 
    150       INTEGER  ::    ji,jj,jk,jn 
    151       !! 
    152       !! AXY (27/07/10): add in indices for depth horizons (for sinking flux 
    153       !!                 and seafloor iron inputs) 
    154       !! INTEGER  ::    i0100, i0200, i0500, i1000, i1100 
    155       !! 
    156       !! model state variables 
    157       REAL(wp) ::    zchn,zchd,zphn,zphd,zpds,zzmi 
    158       REAL(wp) ::    zzme,zdet,zdtc,zdin,zsil,zfer 
    159       REAL(wp) ::    zage 
     112  SUBROUTINE trc_bio_medusa( kt ) 
     113    !!--------------------------------------------------------------------- 
     114    !!                     ***  ROUTINE trc_bio  *** 
     115    !! 
     116    !! ** Purpose :   compute the now trend due to biogeochemical processes 
     117    !!              and add it to the general trend of passive tracers equations 
     118    !! 
     119    !! ** Method  :   each now biological flux is calculated in function of now 
     120    !!              concentrations of tracers. 
     121    !!              depending on the tracer, these fluxes are sources or sinks. 
     122    !!              the total of the sources and sinks for each tracer 
     123    !!              is added to the general trend. 
     124    !!         
     125    !!                      tra = tra + zf...tra - zftra... 
     126    !!                                     |         | 
     127    !!                                     |         | 
     128    !!                                  source      sink 
     129    !!--------------------------------------------------------------------- 
     130    !! 
     131    !! 
     132    !!----------------------------------------------------------------------             
     133    !! Variable conventions 
     134    !!---------------------------------------------------------------------- 
     135    !! 
     136    !! names: z*** - state variable  
     137    !!        f*** - function (or temporary variable used in part of a function) 
     138    !!        x*** - parameter 
     139    !!        b*** - right-hand part (sources and sinks) 
     140    !!        i*** - integer variable (usually used in yes/no flags) 
     141    !! 
     142    !! time (integer timestep) 
     143    INTEGER, INTENT( in ) ::    kt 
     144    !! 
     145    !! spatial array indices 
     146    INTEGER  ::    ji,jj,jk,jn 
     147    !! 
     148    !! AXY (27/07/10): add in indices for depth horizons (for sinking flux 
     149    !!                 and seafloor iron inputs) 
     150    !! INTEGER  ::    i0100, i0200, i0500, i1000, i1100 
     151    !! 
     152    !! model state variables 
     153    REAL(wp) ::    zchn,zchd,zphn,zphd,zpds,zzmi 
     154    REAL(wp) ::    zzme,zdet,zdtc,zdin,zsil,zfer 
    160155# if defined key_roam 
    161       REAL(wp) ::    zdic, zalk, zoxy 
    162       REAL(wp) ::    ztmp, zsal 
     156    REAL(wp) ::    zdic, zalk, zoxy 
     157    REAL(wp) ::    ztmp, zsal 
     158    REAL(wp) ::    zpho 
    163159# endif 
    164 # if defined key_mocsy 
    165       REAL(wp) ::    zpho 
     160    !! 
     161    !! integrated source and sink terms 
     162    REAL(wp) ::    b0 
     163    !! AXY (23/08/13): changed from individual variables for each flux to 
     164    !!                 an array that holds all fluxes 
     165    REAL(wp), DIMENSION(jp_medusa) ::    btra 
     166    !! 
     167    !! primary production and chl related quantities       
     168    REAL(wp)                     ::    fthetan,faln,fchn1,fchn,fjln,fprn,frn 
     169    REAL(wp)                     ::    fthetad,fald,fchd1,fchd,fjld,fprd,frd 
     170    !! AXY (23/11/16): add in light-only limitation term (normalised 0-1 range) 
     171    REAL(wp)                     ::    fjlim_pn, fjlim_pd 
     172    !! AXY (03/02/11): add in Liebig terms 
     173    REAL(wp) ::    fpnlim, fpdlim 
     174    !! AXY (16/07/09): add in Eppley curve functionality 
     175    REAL(wp) ::    loc_T,fun_T,xvpnT,xvpdT 
     176    INTEGER  ::    ieppley 
     177    !! AXY (16/05/11): per Katya's prompting, add in new T-dependence 
     178    !!                 for phytoplankton growth only (i.e. no change 
     179    !!                 for remineralisation) 
     180    REAL(wp) ::    fun_Q10 
     181    !! AXY (01/03/10): add in mixed layer PP diagnostics 
     182    REAL(wp), DIMENSION(jpi,jpj) ::  fprn_ml,fprd_ml 
     183    !! 
     184    !! nutrient limiting factors 
     185    REAL(wp) ::    fnln,ffln            !! N and Fe 
     186    REAL(wp) ::    fnld,ffld,fsld,fsld2 !! N, Fe and Si 
     187    !! 
     188    !! silicon cycle 
     189    REAL(wp) ::    fsin,fnsi,fsin1,fnsi1,fnsi2,fprds,fsdiss 
     190    !! 
     191    !! iron cycle; includes parameters for Parekh et al. (2005) iron scheme 
     192    REAL(wp) ::    ffetop,ffebot,ffescav 
     193    REAL(wp) ::    xLgF, xFeT, xFeF, xFeL         !! state variables for iron-ligand system 
     194    REAL(wp), DIMENSION(jpi,jpj) ::  xFree        !! state variables for iron-ligand system 
     195    REAL(wp) ::    xb_coef_tmp, xb2M4ac           !! iron-ligand parameters 
     196    REAL(wp) ::    xmaxFeF,fdeltaFe               !! max Fe' parameters 
     197    !! 
     198    !! local parameters for Moore et al. (2004) alternative scavenging scheme 
     199    REAL(wp) ::    fbase_scav,fscal_sink,fscal_part,fscal_scav 
     200    !! 
     201    !! local parameters for Moore et al. (2008) alternative scavenging scheme 
     202    REAL(wp) ::    fscal_csink,fscal_sisink,fscal_casink 
     203    !! 
     204    !! local parameters for Galbraith et al. (2010) alternative scavenging scheme 
     205    REAL(wp) ::    xCscav1, xCscav2, xk_org, xORGscav  !! organic portion of scavenging 
     206    REAL(wp) ::    xk_inorg, xINORGscav                !! inorganic portion of scavenging 
     207    !! 
     208    !! microzooplankton grazing 
     209    REAL(wp) ::    fmi1,fmi,fgmipn,fgmid,fgmidc 
     210    REAL(wp) ::    finmi,ficmi,fstarmi,fmith,fmigrow,fmiexcr,fmiresp 
     211    !! 
     212    !! mesozooplankton grazing 
     213    REAL(wp) ::    fme1,fme,fgmepn,fgmepd,fgmepds,fgmezmi,fgmed,fgmedc 
     214    REAL(wp) ::    finme,ficme,fstarme,fmeth,fmegrow,fmeexcr,fmeresp 
     215    !! 
     216    !! mortality/Remineralisation (defunct parameter "fz" removed) 
     217    REAL(wp) ::    fdpn,fdpd,fdpds,fdzmi,fdzme,fdd 
     218# if defined key_roam 
     219    REAL(wp) ::    fddc 
    166220# endif 
    167       !! 
    168       !! integrated source and sink terms 
    169       REAL(wp) ::    b0 
    170       !! AXY (23/08/13): changed from individual variables for each flux to 
    171       !!                 an array that holds all fluxes 
    172       REAL(wp), DIMENSION(jp_medusa) ::    btra 
    173       !! 
    174       !! primary production and chl related quantities       
    175       REAL(wp)                     ::    fthetan,faln,fchn1,fchn,fjln,fprn,frn 
    176       REAL(wp)                     ::    fthetad,fald,fchd1,fchd,fjld,fprd,frd 
    177       !! AXY (23/11/16): add in light-only limitation term (normalised 0-1 range) 
    178       REAL(wp)                     ::    fjlim_pn, fjlim_pd 
    179       !! AXY (03/02/11): add in Liebig terms 
    180       REAL(wp) ::    fpnlim, fpdlim 
    181       !! AXY (16/07/09): add in Eppley curve functionality 
    182       REAL(wp) ::    loc_T,fun_T,xvpnT,xvpdT 
    183       INTEGER  ::    ieppley 
    184       !! AXY (16/05/11): per Katya's prompting, add in new T-dependence 
    185       !!                 for phytoplankton growth only (i.e. no change 
    186       !!                 for remineralisation) 
    187       REAL(wp) ::    fun_Q10 
    188       !! AXY (01/03/10): add in mixed layer PP diagnostics 
    189       REAL(wp), DIMENSION(jpi,jpj) ::  fprn_ml,fprd_ml 
    190       !! 
    191       !! nutrient limiting factors 
    192       REAL(wp) ::    fnln,ffln            !! N and Fe 
    193       REAL(wp) ::    fnld,ffld,fsld,fsld2 !! N, Fe and Si 
    194       !! 
    195       !! silicon cycle 
    196       REAL(wp) ::    fsin,fnsi,fsin1,fnsi1,fnsi2,fprds,fsdiss 
    197       !! 
    198       !! iron cycle; includes parameters for Parekh et al. (2005) iron scheme 
    199       REAL(wp) ::    ffetop,ffebot,ffescav 
    200       REAL(wp) ::    xLgF, xFeT, xFeF, xFeL         !! state variables for iron-ligand system 
    201       REAL(wp), DIMENSION(jpi,jpj) ::  xFree        !! state variables for iron-ligand system 
    202       REAL(wp) ::    xb_coef_tmp, xb2M4ac           !! iron-ligand parameters 
    203       REAL(wp) ::    xmaxFeF,fdeltaFe               !! max Fe' parameters 
    204       !! 
    205       !! local parameters for Moore et al. (2004) alternative scavenging scheme 
    206       REAL(wp) ::    fbase_scav,fscal_sink,fscal_part,fscal_scav 
    207       !! 
    208       !! local parameters for Moore et al. (2008) alternative scavenging scheme 
    209       REAL(wp) ::    fscal_csink,fscal_sisink,fscal_casink 
    210       !! 
    211       !! local parameters for Galbraith et al. (2010) alternative scavenging scheme 
    212       REAL(wp) ::    xCscav1, xCscav2, xk_org, xORGscav  !! organic portion of scavenging 
    213       REAL(wp) ::    xk_inorg, xINORGscav                !! inorganic portion of scavenging 
    214       !! 
    215       !! microzooplankton grazing 
    216       REAL(wp) ::    fmi1,fmi,fgmipn,fgmid,fgmidc 
    217       REAL(wp) ::    finmi,ficmi,fstarmi,fmith,fmigrow,fmiexcr,fmiresp 
    218       !! 
    219       !! mesozooplankton grazing 
    220       REAL(wp) ::    fme1,fme,fgmepn,fgmepd,fgmepds,fgmezmi,fgmed,fgmedc 
    221       REAL(wp) ::    finme,ficme,fstarme,fmeth,fmegrow,fmeexcr,fmeresp 
    222       !! 
    223       !! mortality/Remineralisation (defunct parameter "fz" removed) 
    224       REAL(wp) ::    fdpn,fdpd,fdpds,fdzmi,fdzme,fdd 
     221    REAL(wp) ::    fdpn2,fdpd2,fdpds2,fdzmi2,fdzme2 
     222    REAL(wp) ::    fslown, fslowc 
     223    REAL(wp), DIMENSION(jpi,jpj) ::    fslownflux, fslowcflux 
     224    REAL(wp) ::    fregen,fregensi 
     225    REAL(wp), DIMENSION(jpi,jpj) ::    fregenfast,fregenfastsi 
    225226# if defined key_roam 
    226       REAL(wp) ::    fddc 
     227    REAL(wp) ::    fregenc 
     228    REAL(wp), DIMENSION(jpi,jpj) ::    fregenfastc 
    227229# endif 
    228       REAL(wp) ::    fdpn2,fdpd2,fdpds2,fdzmi2,fdzme2 
    229       REAL(wp) ::    fslown, fslowc 
    230       REAL(wp), DIMENSION(jpi,jpj) ::    fslownflux, fslowcflux 
    231       REAL(wp) ::    fregen,fregensi 
    232       REAL(wp), DIMENSION(jpi,jpj) ::    fregenfast,fregenfastsi 
     230    !! 
     231    !! particle flux 
     232    REAL(WP) ::    fthk,fdep,fdep1,fdep2,flat,fcaco3 
     233    REAL(WP) ::    ftempn,ftempsi,ftempfe,ftempc,ftempca 
     234    REAL(wp) ::    freminn,freminsi,freminfe,freminc,freminca 
     235    REAL(wp), DIMENSION(jpi,jpj) ::    ffastn,ffastsi,ffastfe,ffastc,ffastca 
     236    REAL(wp) ::    fleftn,fleftsi,fleftfe,fleftc,fleftca 
     237    REAL(wp) ::    fheren,fheresi,fherefe,fherec,fhereca 
     238    REAL(wp) ::    fprotf 
     239    REAL(wp), DIMENSION(jpi,jpj) ::    fsedn,fsedsi,fsedfe,fsedc,fsedca 
     240    REAL(wp), DIMENSION(jpi,jpj) ::    fccd 
     241    REAL(wp) ::    fccd_dep 
     242    !! AXY (28/11/16): fix mbathy bug 
     243    INTEGER  ::    jmbathy 
     244    !! 
     245    !! AXY (06/07/11): alternative fast detritus schemes 
     246    REAL(wp) ::    fb_val, fl_sst 
     247    !! 
     248    !! AXY (08/07/11): fate of fast detritus reaching the seafloor 
     249    REAL(wp) ::    ffast2slown,ffast2slowfe,ffast2slowc 
     250    !! 
     251    !! conservation law 
     252    REAL(wp) ::    fnit0,fsil0,ffer0  
    233253# if defined key_roam 
    234       REAL(wp) ::    fregenc 
    235       REAL(wp), DIMENSION(jpi,jpj) ::    fregenfastc 
     254    REAL(wp) ::    fcar0,falk0,foxy0  
     255# endif       
     256    !!  
     257    !! temporary variables 
     258    REAL(wp) ::    fq0,fq1,fq2,fq3,fq4,fq5,fq6,fq7,fq8,fq9 
     259    !! 
     260    !! water column nutrient and flux integrals 
     261    REAL(wp), DIMENSION(jpi,jpj) ::    ftot_n,ftot_si,ftot_fe 
     262    REAL(wp), DIMENSION(jpi,jpj) ::    fflx_n,fflx_si,fflx_fe 
     263    REAL(wp), DIMENSION(jpi,jpj) ::    fifd_n,fifd_si,fifd_fe 
     264    REAL(wp), DIMENSION(jpi,jpj) ::    fofd_n,fofd_si,fofd_fe 
     265# if defined key_roam 
     266    REAL(wp), DIMENSION(jpi,jpj) ::    ftot_c,ftot_a,ftot_o2 
     267    REAL(wp), DIMENSION(jpi,jpj) ::    fflx_c,fflx_a,fflx_o2 
     268    REAL(wp), DIMENSION(jpi,jpj) ::    fifd_c,fifd_a,fifd_o2 
     269    REAL(wp), DIMENSION(jpi,jpj) ::    fofd_c,fofd_a,fofd_o2 
    236270# endif 
    237       !! 
    238       !! particle flux 
    239       REAL(WP) ::    fthk,fdep,fdep1,fdep2,flat,fcaco3 
    240       REAL(WP) ::    ftempn,ftempsi,ftempfe,ftempc,ftempca 
    241       REAL(wp) ::    freminn,freminsi,freminfe,freminc,freminca 
    242       REAL(wp), DIMENSION(jpi,jpj) ::    ffastn,ffastsi,ffastfe,ffastc,ffastca 
    243       REAL(wp) ::    fleftn,fleftsi,fleftfe,fleftc,fleftca 
    244       REAL(wp) ::    fheren,fheresi,fherefe,fherec,fhereca 
    245       REAL(wp) ::    fprotf 
    246       REAL(wp), DIMENSION(jpi,jpj) ::    fsedn,fsedsi,fsedfe,fsedc,fsedca 
    247       REAL(wp), DIMENSION(jpi,jpj) ::    fccd 
    248       REAL(wp) ::    fccd_dep 
    249       !! AXY (28/11/16): fix mbathy bug 
    250       INTEGER  ::    jmbathy 
    251       !! 
    252       !! AXY (06/07/11): alternative fast detritus schemes 
    253       REAL(wp) ::    fb_val, fl_sst 
    254       !! 
    255       !! AXY (08/07/11): fate of fast detritus reaching the seafloor 
    256       REAL(wp) ::    ffast2slown,ffast2slowfe,ffast2slowc 
    257       !! 
    258       !! conservation law 
    259       REAL(wp) ::    fnit0,fsil0,ffer0  
     271    !! 
     272    !! zooplankton grazing integrals 
     273    REAL(wp), DIMENSION(jpi,jpj) ::    fzmi_i,fzmi_o,fzme_i,fzme_o 
     274    !! 
     275    !! limitation term temporary variables 
     276    REAL(wp), DIMENSION(jpi,jpj) ::    ftot_pn,ftot_pd 
     277    REAL(wp), DIMENSION(jpi,jpj) ::    ftot_zmi,ftot_zme,ftot_det,ftot_dtc 
     278    !! use ballast scheme (1) or simple exponential scheme (0; a conservation test) 
     279    INTEGER  ::    iball 
     280    !! use biological fluxes (1) or not (0) 
     281    INTEGER  ::    ibio_switch 
     282    !! 
     283    !! diagnose fluxes (should only be used in 1D runs) 
     284    INTEGER  ::    idf, idfval 
     285    !! 
     286    !! nitrogen and silicon production and consumption 
     287    REAL(wp) ::    fn_prod, fn_cons, fs_prod, fs_cons 
     288    REAL(wp), DIMENSION(jpi,jpj) ::    fnit_prod, fnit_cons, fsil_prod, fsil_cons 
    260289# if defined key_roam 
    261       REAL(wp) ::    fcar0,falk0,foxy0  
    262 # endif       
    263       !!  
    264       !! temporary variables 
    265       REAL(wp) ::    fq0,fq1,fq2,fq3,fq4,fq5,fq6,fq7,fq8,fq9 
    266       !! 
    267       !! water column nutrient and flux integrals 
    268       REAL(wp), DIMENSION(jpi,jpj) ::    ftot_n,ftot_si,ftot_fe 
    269       REAL(wp), DIMENSION(jpi,jpj) ::    fflx_n,fflx_si,fflx_fe 
    270       REAL(wp), DIMENSION(jpi,jpj) ::    fifd_n,fifd_si,fifd_fe 
    271       REAL(wp), DIMENSION(jpi,jpj) ::    fofd_n,fofd_si,fofd_fe 
     290    !! 
     291    !! flags to help with calculating the position of the CCD 
     292    INTEGER, DIMENSION(jpi,jpj) ::     i2_omcal,i2_omarg 
     293    !! 
     294    !! ROAM air-sea flux and diagnostic parameters 
     295    REAL(wp) ::    f_wind 
     296    !! AXY (24/11/16): add xCO2 variable for atmosphere (what we actually have) 
     297    REAL(wp) ::    f_xco2a 
     298    REAL(wp) ::    f_ph, f_pco2w, f_h2co3, f_hco3, f_co3, f_co2flux 
     299    REAL(wp) ::    f_TDIC, f_TALK, f_dcf, f_henry 
     300    REAL(wp) ::    f_uwind, f_vwind, f_pp0 
     301    REAL(wp) ::    f_kw660, f_o2flux, f_o2sat, f_o2sat3 
     302    REAL(wp), DIMENSION(jpi,jpj) ::    f_omcal, f_omarg 
     303    !! 
     304    !! AXY (23/06/15): additional diagnostics for MOCSY and oxygen 
     305    REAL(wp) ::    f_fco2w, f_BetaD, f_rhosw, f_opres, f_insitut, f_pco2atm, f_fco2atm 
     306    REAL(wp) ::    f_schmidtco2, f_kwco2, f_K0, f_co2starair, f_dpco2, f_kwo2 
     307    !! jpalm 14-07-2016: convert CO2flux diag from mmol/m2/d to kg/m2/s 
     308    REAL, PARAMETER :: weight_CO2_mol = 44.0095  !! g / mol 
     309    REAL, PARAMETER :: secs_in_day    = 86400.0  !! s / d 
     310    REAL, PARAMETER :: CO2flux_conv   = (1.e-6 * weight_CO2_mol) / secs_in_day 
     311    !! 
     312    INTEGER  ::    iters 
     313    REAL(wp) ::    f_year 
     314    INTEGER  ::    i_year 
     315    INTEGER  ::    iyr1, iyr2 
     316    !! 
     317    !! carbon, alkalinity production and consumption 
     318    REAL(wp) ::    fc_prod, fc_cons, fa_prod, fa_cons 
     319    REAL(wp), DIMENSION(jpi,jpj) ::    fcomm_resp 
     320    REAL(wp), DIMENSION(jpi,jpj) ::    fcar_prod, fcar_cons 
     321    !! 
     322    !! oxygen production and consumption (and non-consumption) 
     323    REAL(wp) ::    fo2_prod, fo2_cons, fo2_ncons, fo2_ccons 
     324    REAL(wp), DIMENSION(jpi,jpj) ::    foxy_prod, foxy_cons, foxy_anox 
     325    !! Jpalm (11-08-2014) 
     326    !! add DMS in MEDUSA for UKESM1 model 
     327    REAL(wp) ::    dms_surf 
     328    !! AXY (13/03/15): add in other DMS calculations 
     329    REAL(wp) ::    dms_andr, dms_simo, dms_aran, dms_hall, dms_nlim, dms_wtkn 
     330# endif 
     331    !!  
     332    !! benthic fluxes 
     333    INTEGER  ::    ibenthic 
     334    REAL(wp), DIMENSION(jpi,jpj) :: f_sbenin_n, f_sbenin_fe,              f_sbenin_c 
     335    REAL(wp), DIMENSION(jpi,jpj) :: f_fbenin_n, f_fbenin_fe, f_fbenin_si, f_fbenin_c, f_fbenin_ca 
     336    REAL(wp), DIMENSION(jpi,jpj) :: f_benout_n, f_benout_fe, f_benout_si, f_benout_c, f_benout_ca 
     337    REAL(wp) ::    zfact 
     338    !!  
     339    !! benthic fluxes of CaCO3 that shouldn't happen because of lysocline 
     340    REAL(wp), DIMENSION(jpi,jpj) :: f_benout_lyso_ca 
     341    !! 
     342    !! riverine fluxes 
     343    REAL(wp), DIMENSION(jpi,jpj) :: f_runoff, f_riv_n, f_riv_si, f_riv_c, f_riv_alk 
     344    !! AXY (19/07/12): variables for local riverine fluxes to handle inputs below surface 
     345    REAL(wp) ::    f_riv_loc_n, f_riv_loc_si, f_riv_loc_c, f_riv_loc_alk 
     346    !! 
     347    !! horizontal grid location 
     348    REAL(wp) ::    flatx, flonx 
     349    !! 
     350    !! Jpalm -- 11-10-2015 -- adapt diag to iom_use 
     351    !! 2D var for diagnostics. 
     352    REAL(wp), POINTER, DIMENSION(:,:  ) :: fprn2d, fdpn2d, fprd2d, fdpd2d, fprds2d, fsdiss2d, fgmipn2d 
     353    REAL(wp), POINTER, DIMENSION(:,:  ) :: fgmid2d, fdzmi2d, fgmepn2d, fgmepd2d, fgmezmi2d, fgmed2d 
     354    REAL(wp), POINTER, DIMENSION(:,:  ) :: fdzme2d, fslown2d, fdd2d, ffetop2d, ffebot2d, ffescav2d 
     355    REAL(wp), POINTER, DIMENSION(:,:  ) :: fjln2d, fnln2d, ffln2d, fjld2d, fnld2d, ffld2d, fsld2d2 
     356    REAL(wp), POINTER, DIMENSION(:,:  ) :: fsld2d, fregen2d, fregensi2d, ftempn2d, ftempsi2d, ftempfe2d 
     357    REAL(wp), POINTER, DIMENSION(:,:  ) :: ftempc2d, ftempca2d, freminn2d, freminsi2d, freminfe2d 
     358    REAL(wp), POINTER, DIMENSION(:,:  ) :: freminc2d, freminca2d 
     359    REAL(wp), POINTER, DIMENSION(:,:  ) :: zw2d 
    272360# if defined key_roam 
    273       REAL(wp), DIMENSION(jpi,jpj) ::    ftot_c,ftot_a,ftot_o2 
    274       REAL(wp), DIMENSION(jpi,jpj) ::    fflx_c,fflx_a,fflx_o2 
    275       REAL(wp), DIMENSION(jpi,jpj) ::    fifd_c,fifd_a,fifd_o2 
    276       REAL(wp), DIMENSION(jpi,jpj) ::    fofd_c,fofd_a,fofd_o2 
     361    REAL(wp), POINTER, DIMENSION(:,:  ) :: ffastca2d, rivn2d, rivsi2d, rivc2d, rivalk2d, fslowc2d 
     362    REAL(wp), POINTER, DIMENSION(:,:  ) :: fdpn22d, fdpd22d, fdzmi22d, fdzme22d, zimesn2d, zimesd2d 
     363    REAL(wp), POINTER, DIMENSION(:,:  ) :: zimesc2d, zimesdc2d, ziexcr2d, ziresp2d, zigrow2d, zemesn2d 
     364    REAL(wp), POINTER, DIMENSION(:,:  ) :: zemesd2d, zemesc2d, zemesdc2d, zeexcr2d, zeresp2d, zegrow2d 
     365    REAL(wp), POINTER, DIMENSION(:,:  ) :: mdetc2d, gmidc2d, gmedc2d, f_pco2a2d, f_pco2w2d, f_co2flux2d 
     366    REAL(wp), POINTER, DIMENSION(:,:  ) :: f_TDIC2d, f_TALK2d, f_kw6602d, f_pp02d, f_o2flux2d, f_o2sat2d 
     367    REAL(wp), POINTER, DIMENSION(:,:  ) :: dms_andr2d, dms_simo2d, dms_aran2d, dms_hall2d, dms_surf2d 
     368    REAL(wp), POINTER, DIMENSION(:,:  ) :: iben_n2d, iben_fe2d, iben_c2d, iben_si2d, iben_ca2d, oben_n2d 
     369    REAL(wp), POINTER, DIMENSION(:,:  ) :: oben_fe2d, oben_c2d, oben_si2d, oben_ca2d, sfr_ocal2d 
     370    REAL(wp), POINTER, DIMENSION(:,:  ) :: sfr_oarg2d, lyso_ca2d  
     371    !! AXY (23/11/16): extra MOCSY diagnostics 
     372    REAL(wp), POINTER, DIMENSION(:,:  ) :: f_xco2a_2d, f_fco2w_2d, f_fco2a_2d 
     373    REAL(wp), POINTER, DIMENSION(:,:  ) :: f_ocnrhosw_2d, f_ocnschco2_2d, f_ocnkwco2_2d 
     374    REAL(wp), POINTER, DIMENSION(:,:  ) :: f_ocnk0_2d, f_co2starair_2d, f_ocndpco2_2d 
    277375# endif 
    278       !! 
    279       !! zooplankton grazing integrals 
    280       REAL(wp), DIMENSION(jpi,jpj) ::    fzmi_i,fzmi_o,fzme_i,fzme_o 
    281       !! 
    282       !! limitation term temporary variables 
    283       REAL(wp), DIMENSION(jpi,jpj) ::    ftot_pn,ftot_pd 
    284       REAL(wp), DIMENSION(jpi,jpj) ::    ftot_zmi,ftot_zme,ftot_det,ftot_dtc 
    285       !! use ballast scheme (1) or simple exponential scheme (0; a conservation test) 
    286       INTEGER  ::    iball 
    287       !! use biological fluxes (1) or not (0) 
    288       INTEGER  ::    ibio_switch 
    289       !! 
    290       !! diagnose fluxes (should only be used in 1D runs) 
    291       INTEGER  ::    idf, idfval 
    292       !! 
    293       !! nitrogen and silicon production and consumption 
    294       REAL(wp) ::    fn_prod, fn_cons, fs_prod, fs_cons 
    295       REAL(wp), DIMENSION(jpi,jpj) ::    fnit_prod, fnit_cons, fsil_prod, fsil_cons 
     376    !! 
     377    !! 3D var for diagnostics. 
     378    REAL(wp), POINTER, DIMENSION(:,:,:) :: tpp3d, detflux3d, remin3dn 
     379    !! 
    296380# if defined key_roam 
    297       !! 
    298       !! flags to help with calculating the position of the CCD 
    299       INTEGER, DIMENSION(jpi,jpj) ::     i2_omcal,i2_omarg 
    300       !! 
    301       !! ROAM air-sea flux and diagnostic parameters 
    302       REAL(wp) ::    f_wind 
    303       !! AXY (24/11/16): add xCO2 variable for atmosphere (what we actually have) 
    304       REAL(wp) ::    f_xco2a 
    305       REAL(wp) ::    f_ph, f_pco2w, f_h2co3, f_hco3, f_co3, f_co2flux 
    306       REAL(wp) ::    f_TDIC, f_TALK, f_dcf, f_henry 
    307       REAL(wp) ::    f_uwind, f_vwind, f_pp0 
    308       REAL(wp) ::    f_kw660, f_o2flux, f_o2sat, f_o2sat3 
    309       REAL(wp), DIMENSION(jpi,jpj) ::    f_omcal, f_omarg 
    310       !! 
    311       !! AXY (23/06/15): additional diagnostics for MOCSY and oxygen 
    312       REAL(wp) ::    f_fco2w, f_BetaD, f_rhosw, f_opres, f_insitut, f_pco2atm, f_fco2atm 
    313       REAL(wp) ::    f_schmidtco2, f_kwco2, f_K0, f_co2starair, f_dpco2, f_kwo2 
    314       !! jpalm 14-07-2016: convert CO2flux diag from mmol/m2/d to kg/m2/s 
    315       REAL, PARAMETER :: weight_CO2_mol = 44.0095  !! g / mol 
    316       REAL, PARAMETER :: secs_in_day    = 86400.0  !! s / d 
    317       REAL, PARAMETER :: CO2flux_conv   = (1.e-6 * weight_CO2_mol) / secs_in_day 
    318  
    319       !! 
    320       INTEGER  ::    iters 
    321       REAL(wp) ::    f_year 
    322       INTEGER  ::    i_year 
    323       INTEGER  ::    iyr1, iyr2 
    324       !! 
    325       !! carbon, alkalinity production and consumption 
    326       REAL(wp) ::    fc_prod, fc_cons, fa_prod, fa_cons 
    327       REAL(wp), DIMENSION(jpi,jpj) ::    fcomm_resp 
    328       REAL(wp), DIMENSION(jpi,jpj) ::    fcar_prod, fcar_cons 
    329       !! 
    330       !! oxygen production and consumption (and non-consumption) 
    331       REAL(wp) ::    fo2_prod, fo2_cons, fo2_ncons, fo2_ccons 
    332       REAL(wp), DIMENSION(jpi,jpj) ::    foxy_prod, foxy_cons, foxy_anox 
    333       !! Jpalm (11-08-2014) 
    334       !! add DMS in MEDUSA for UKESM1 model 
    335       REAL(wp) ::    dms_surf 
    336       !! AXY (13/03/15): add in other DMS calculations 
    337       REAL(wp) ::    dms_andr, dms_simo, dms_aran, dms_hall 
    338  
     381    !! AXY (04/11/16) 
     382    !! 2D var for new CMIP6 diagnostics (behind a key_roam ifdef for simplicity) 
     383    REAL(wp), POINTER, DIMENSION(:,:  ) :: fgco2, intdissic, intdissin, intdissisi, inttalk, o2min, zo2min 
     384    REAL(wp), POINTER, DIMENSION(:,:  ) :: fbddtalk, fbddtdic, fbddtdife, fbddtdin, fbddtdisi 
     385    !! 
     386    !! 3D var for new CMIP6 diagnostics 
     387    REAL(wp), POINTER, DIMENSION(:,:,:) :: tppd3 
     388    REAL(wp), POINTER, DIMENSION(:,:,:) :: bddtalk3, bddtdic3, bddtdife3, bddtdin3, bddtdisi3 
     389    REAL(wp), POINTER, DIMENSION(:,:,:) :: fd_nit3, fd_sil3, fd_car3, fd_cal3 
     390    REAL(wp), POINTER, DIMENSION(:,:,:) :: co33, co3satarag3, co3satcalc3, dcalc3 
     391    REAL(wp), POINTER, DIMENSION(:,:,:) :: expc3, expn3 
     392    REAL(wp), POINTER, DIMENSION(:,:,:) :: fediss3, fescav3 
     393    REAL(wp), POINTER, DIMENSION(:,:,:) :: migrazp3, migrazd3, megrazp3, megrazd3, megrazz3 
     394    REAL(wp), POINTER, DIMENSION(:,:,:) :: o2sat3, pbsi3, pcal3, remoc3 
     395    REAL(wp), POINTER, DIMENSION(:,:,:) :: pnlimj3, pnlimn3, pnlimfe3, pdlimj3, pdlimn3, pdlimfe3, pdlimsi3 
    339396# endif 
    340       !!  
    341       !! benthic fluxes 
    342       INTEGER  ::    ibenthic 
    343       REAL(wp), DIMENSION(jpi,jpj) :: f_sbenin_n, f_sbenin_fe,              f_sbenin_c 
    344       REAL(wp), DIMENSION(jpi,jpj) :: f_fbenin_n, f_fbenin_fe, f_fbenin_si, f_fbenin_c, f_fbenin_ca 
    345       REAL(wp), DIMENSION(jpi,jpj) :: f_benout_n, f_benout_fe, f_benout_si, f_benout_c, f_benout_ca 
    346       REAL(wp) ::    zfact 
    347       !!  
    348       !! benthic fluxes of CaCO3 that shouldn't happen because of lysocline 
    349       REAL(wp), DIMENSION(jpi,jpj) :: f_benout_lyso_ca 
    350       !! 
    351       !! riverine fluxes 
    352       REAL(wp), DIMENSION(jpi,jpj) :: f_runoff, f_riv_n, f_riv_si, f_riv_c, f_riv_alk 
    353       !! AXY (19/07/12): variables for local riverine fluxes to handle inputs below surface 
    354       REAL(wp) ::    f_riv_loc_n, f_riv_loc_si, f_riv_loc_c, f_riv_loc_alk 
    355       !! 
    356       !! Jpalm -- 11-10-2015 -- adapt diag to iom_use 
    357       !! 2D var for diagnostics. 
    358       REAL(wp), POINTER, DIMENSION(:,:  ) :: fprn2d, fdpn2d, fprd2d, fdpd2d, fprds2d, fsdiss2d, fgmipn2d 
    359       REAL(wp), POINTER, DIMENSION(:,:  ) :: fgmid2d, fdzmi2d, fgmepn2d, fgmepd2d, fgmezmi2d, fgmed2d 
    360       REAL(wp), POINTER, DIMENSION(:,:  ) :: fdzme2d, fslown2d, fdd2d, ffetop2d, ffebot2d, ffescav2d 
    361       REAL(wp), POINTER, DIMENSION(:,:  ) :: fjln2d, fnln2d, ffln2d, fjld2d, fnld2d, ffld2d, fsld2d2 
    362       REAL(wp), POINTER, DIMENSION(:,:  ) :: fsld2d, fregen2d, fregensi2d, ftempn2d, ftempsi2d, ftempfe2d 
    363       REAL(wp), POINTER, DIMENSION(:,:  ) :: ftempc2d, ftempca2d, freminn2d, freminsi2d, freminfe2d 
    364       REAL(wp), POINTER, DIMENSION(:,:  ) :: freminc2d, freminca2d 
    365       REAL(wp), POINTER, DIMENSION(:,:  ) :: zw2d 
     397    !!--------------------------------------------------------------------- 
     398 
     399# if defined key_debug_medusa 
     400    IF ( lwp ) write (numout,*) 'trc_bio_medusa: variables defined' 
     401    CALL flush(numout) 
     402# endif  
     403 
     404    !! AXY (20/11/14): alter this to report on first MEDUSA call 
     405    !! IF( kt == nit000 ) THEN 
     406    IF( kt == nittrc000 ) THEN 
     407       IF(lwp) WRITE(numout,*) 
     408       IF(lwp) WRITE(numout,*) ' trc_bio: MEDUSA bio-model' 
     409       IF(lwp) WRITE(numout,*) ' ~~~~~~~' 
     410       IF(lwp) WRITE(numout,*) ' kt =',kt 
     411    ENDIF 
     412 
     413    !! AXY (13/01/12): is benthic model properly interactive? 0 = no, 1 = yes 
     414    ibenthic = 1 
     415 
     416    !!---------------------------------------------------------------------- 
     417    !! b0 is present for debugging purposes; using b0 = 0 sets the tendency 
     418    !! terms of all biological equations to 0. 
     419    !!---------------------------------------------------------------------- 
     420    !! 
     421    !! AXY (03/09/14): probably not the smartest move ever, but it'll fit 
     422    !!                 the bill for now; another item on the things-to-sort- 
     423    !!       out-in-the-future list ... 
     424# if defined key_kill_medusa 
     425    b0 = 0. 
     426# else 
     427    b0 = 1. 
     428# endif 
     429    !!---------------------------------------------------------------------- 
     430    !! fast detritus ballast scheme (0 = no; 1 = yes) 
     431    !! alternative to ballast scheme is same scheme but with no ballast 
     432    !! protection (not dissimilar to Martin et al., 1987) 
     433    !!---------------------------------------------------------------------- 
     434    !! 
     435    iball = 1 
     436 
     437    !!---------------------------------------------------------------------- 
     438    !! full flux diagnostics (0 = no; 1 = yes); appear in ocean.output 
     439    !! these should *only* be used in 1D since they give comprehensive 
     440    !! output for ecological functions in the model; primarily used in 
     441    !! debugging 
     442    !!---------------------------------------------------------------------- 
     443    !! 
     444    idf    = 0 
     445    !! 
     446    !! timer mechanism 
     447    if (kt/120*120.eq.kt) then 
     448       idfval = 1 
     449    else 
     450       idfval = 0 
     451    endif 
     452 
     453    !!---------------------------------------------------------------------- 
     454    !! blank fast-sinking detritus 2D fields 
     455    !!---------------------------------------------------------------------- 
     456    !! 
     457    ffastn(:,:)  = 0.0        !! organic nitrogen 
     458    ffastsi(:,:) = 0.0        !! biogenic silicon 
     459    ffastfe(:,:) = 0.0        !! organic iron 
     460    ffastc(:,:)  = 0.0        !! organic carbon 
     461    ffastca(:,:) = 0.0        !! biogenic calcium carbonate 
     462    !! 
     463    fsedn(:,:)   = 0.0        !! Seafloor flux of N  
     464    fsedsi(:,:)  = 0.0        !! Seafloor flux of Si 
     465    fsedfe(:,:)  = 0.0        !! Seafloor flux of Fe 
     466    fsedc(:,:)   = 0.0        !! Seafloor flux of C 
     467    fsedca(:,:)  = 0.0        !! Seafloor flux of CaCO3 
     468    !! 
     469    fregenfast(:,:)   = 0.0   !! integrated  N regeneration (fast detritus) 
     470    fregenfastsi(:,:) = 0.0   !! integrated Si regeneration (fast detritus) 
    366471# if defined key_roam 
    367       REAL(wp), POINTER, DIMENSION(:,:  ) :: ffastca2d, rivn2d, rivsi2d, rivc2d, rivalk2d, fslowc2d 
    368       REAL(wp), POINTER, DIMENSION(:,:  ) :: fdpn22d, fdpd22d, fdzmi22d, fdzme22d, zimesn2d, zimesd2d 
    369       REAL(wp), POINTER, DIMENSION(:,:  ) :: zimesc2d, zimesdc2d, ziexcr2d, ziresp2d, zigrow2d, zemesn2d 
    370       REAL(wp), POINTER, DIMENSION(:,:  ) :: zemesd2d, zemesc2d, zemesdc2d, zeexcr2d, zeresp2d, zegrow2d 
    371       REAL(wp), POINTER, DIMENSION(:,:  ) :: mdetc2d, gmidc2d, gmedc2d, f_pco2a2d, f_pco2w2d, f_co2flux2d 
    372       REAL(wp), POINTER, DIMENSION(:,:  ) :: f_TDIC2d, f_TALK2d, f_kw6602d, f_pp02d, f_o2flux2d, f_o2sat2d 
    373       REAL(wp), POINTER, DIMENSION(:,:  ) :: dms_andr2d, dms_simo2d, dms_aran2d, dms_hall2d, dms_surf2d 
    374       REAL(wp), POINTER, DIMENSION(:,:  ) :: iben_n2d, iben_fe2d, iben_c2d, iben_si2d, iben_ca2d, oben_n2d 
    375       REAL(wp), POINTER, DIMENSION(:,:  ) :: oben_fe2d, oben_c2d, oben_si2d, oben_ca2d, sfr_ocal2d 
    376       REAL(wp), POINTER, DIMENSION(:,:  ) :: sfr_oarg2d, lyso_ca2d  
    377       !! AXY (23/11/16): extra MOCSY diagnostics 
    378       REAL(wp), POINTER, DIMENSION(:,:  ) :: f_xco2a_2d, f_fco2w_2d, f_fco2a_2d 
    379       REAL(wp), POINTER, DIMENSION(:,:  ) :: f_ocnrhosw_2d, f_ocnschco2_2d, f_ocnkwco2_2d 
    380       REAL(wp), POINTER, DIMENSION(:,:  ) :: f_ocnk0_2d, f_co2starair_2d, f_ocndpco2_2d 
     472    fregenfastc(:,:)  = 0.0   !! integrated  C regeneration (fast detritus) 
    381473# endif 
    382       !! 
    383       !! 3D var for diagnostics. 
    384       REAL(wp), POINTER, DIMENSION(:,:,:) :: tpp3d, detflux3d, remin3dn 
    385       !! 
     474    !! 
     475    fccd(:,:)    = 0.0        !! last depth level before CCD 
     476 
     477    !!---------------------------------------------------------------------- 
     478    !! blank nutrient/flux inventories 
     479    !!---------------------------------------------------------------------- 
     480    !! 
     481    fflx_n(:,:)  = 0.0        !! nitrogen flux total 
     482    fflx_si(:,:) = 0.0        !! silicon  flux total 
     483    fflx_fe(:,:) = 0.0        !! iron     flux total 
     484    fifd_n(:,:)  = 0.0        !! nitrogen fast detritus production 
     485    fifd_si(:,:) = 0.0        !! silicon  fast detritus production 
     486    fifd_fe(:,:) = 0.0        !! iron     fast detritus production 
     487    fofd_n(:,:)  = 0.0        !! nitrogen fast detritus remineralisation 
     488    fofd_si(:,:) = 0.0        !! silicon  fast detritus remineralisation 
     489    fofd_fe(:,:) = 0.0        !! iron     fast detritus remineralisation 
    386490# if defined key_roam 
    387       !! AXY (04/11/16) 
    388       !! 2D var for new CMIP6 diagnostics (behind a key_roam ifdef for simplicity) 
    389       REAL(wp), POINTER, DIMENSION(:,:  ) :: fgco2, intdissic, intdissin, intdissisi, inttalk, o2min, zo2min 
    390       REAL(wp), POINTER, DIMENSION(:,:  ) :: fbddtalk, fbddtdic, fbddtdife, fbddtdin, fbddtdisi 
    391       !! 
    392       !! 3D var for new CMIP6 diagnostics 
    393       REAL(wp), POINTER, DIMENSION(:,:,:) :: tppd3 
    394       REAL(wp), POINTER, DIMENSION(:,:,:) :: bddtalk3, bddtdic3, bddtdife3, bddtdin3, bddtdisi3 
    395       REAL(wp), POINTER, DIMENSION(:,:,:) :: fd_nit3, fd_sil3, fd_car3, fd_cal3 
    396       REAL(wp), POINTER, DIMENSION(:,:,:) :: co33, co3satarag3, co3satcalc3, dcalc3 
    397       REAL(wp), POINTER, DIMENSION(:,:,:) :: expc3, expn3 
    398       REAL(wp), POINTER, DIMENSION(:,:,:) :: fediss3, fescav3 
    399       REAL(wp), POINTER, DIMENSION(:,:,:) :: migrazp3, migrazd3, megrazp3, megrazd3, megrazz3 
    400       REAL(wp), POINTER, DIMENSION(:,:,:) :: o2sat3, pbsi3, pcal3, remoc3 
    401       REAL(wp), POINTER, DIMENSION(:,:,:) :: pnlimj3, pnlimn3, pnlimfe3, pdlimj3, pdlimn3, pdlimfe3, pdlimsi3 
     491    fflx_c(:,:)  = 0.0        !! carbon     flux total 
     492    fflx_a(:,:)  = 0.0        !! alkalinity flux total 
     493    fflx_o2(:,:) = 0.0        !! oxygen     flux total 
     494    ftot_c(:,:)  = 0.0        !! carbon     inventory 
     495    ftot_a(:,:)  = 0.0        !! alkalinity inventory 
     496    ftot_o2(:,:) = 0.0        !! oxygen     inventory 
     497    fifd_c(:,:)  = 0.0        !! carbon     fast detritus production 
     498    fifd_a(:,:)  = 0.0        !! alkalinity fast detritus production 
     499    fifd_o2(:,:) = 0.0        !! oxygen     fast detritus production 
     500    fofd_c(:,:)  = 0.0        !! carbon     fast detritus remineralisation 
     501    fofd_a(:,:)  = 0.0        !! alkalinity fast detritus remineralisation 
     502    fofd_o2(:,:) = 0.0        !! oxygen     fast detritus remineralisation 
     503    !! 
     504    fnit_prod(:,:) = 0.0      !! (organic)   nitrogen production 
     505    fnit_cons(:,:) = 0.0      !! (organic)   nitrogen consumption 
     506    fsil_prod(:,:) = 0.0      !! (inorganic) silicon production 
     507    fsil_cons(:,:) = 0.0      !! (inorganic) silicon consumption 
     508    fcar_prod(:,:) = 0.0      !! (organic)   carbon production 
     509    fcar_cons(:,:) = 0.0      !! (organic)   carbon consumption 
     510    !! 
     511    foxy_prod(:,:) = 0.0      !! oxygen production 
     512    foxy_cons(:,:) = 0.0      !! oxygen consumption 
     513    foxy_anox(:,:) = 0.0      !! unrealised oxygen consumption 
     514    !! 
    402515# endif 
    403       !!--------------------------------------------------------------------- 
    404  
    405 # if defined key_debug_medusa 
    406       IF (lwp) write (numout,*) 'trc_bio_medusa: variables defined' 
    407       CALL flush(numout) 
    408 # endif  
    409  
    410       !! AXY (20/11/14): alter this to report on first MEDUSA call 
    411       !! IF( kt == nit000 ) THEN 
    412       IF( kt == nittrc000 ) THEN 
    413          IF(lwp) WRITE(numout,*) 
    414          IF(lwp) WRITE(numout,*) ' trc_bio: MEDUSA bio-model' 
    415          IF(lwp) WRITE(numout,*) ' ~~~~~~~' 
    416     IF(lwp) WRITE(numout,*) ' kt =',kt 
    417       ENDIF 
    418  
    419       !! AXY (13/01/12): is benthic model properly interactive? 0 = no, 1 = yes 
    420       ibenthic = 1 
    421  
    422       !! not sure what this is for; it's not used anywhere; commenting out 
    423       !! fbodn(:,:) = 0.e0    
    424  
    425       !! 
    426       IF( ln_diatrc ) THEN 
    427          !! blank 2D diagnostic array 
    428          trc2d(:,:,:) = 0.e0 
    429          !! 
    430          !! blank 3D diagnostic array 
    431          trc3d(:,:,:,:) = 0.e0 
    432       ENDIF 
    433  
    434       !!---------------------------------------------------------------------- 
    435       !! b0 is present for debugging purposes; using b0 = 0 sets the tendency 
    436       !! terms of all biological equations to 0. 
    437       !!---------------------------------------------------------------------- 
    438       !! 
    439       !! AXY (03/09/14): probably not the smartest move ever, but it'll fit 
    440       !!                 the bill for now; another item on the things-to-sort- 
    441       !!     out-in-the-future list ... 
    442 # if defined key_kill_medusa 
    443       b0 = 0. 
    444 # else 
    445       b0 = 1. 
    446 # endif 
    447       !!---------------------------------------------------------------------- 
    448       !! fast detritus ballast scheme (0 = no; 1 = yes) 
    449       !! alternative to ballast scheme is same scheme but with no ballast 
    450       !! protection (not dissimilar to Martin et al., 1987) 
    451       !!---------------------------------------------------------------------- 
    452       !! 
    453       iball = 1 
    454  
    455       !!---------------------------------------------------------------------- 
    456       !! full flux diagnostics (0 = no; 1 = yes); appear in ocean.output 
    457       !! these should *only* be used in 1D since they give comprehensive 
    458       !! output for ecological functions in the model; primarily used in 
    459       !! debugging 
    460       !!---------------------------------------------------------------------- 
    461       !! 
    462       idf    = 0 
    463       !! 
    464       !! timer mechanism 
    465       if (kt/120*120.eq.kt) then 
    466          idfval = 1 
    467       else 
    468          idfval = 0 
    469       endif 
    470  
    471       !!---------------------------------------------------------------------- 
    472       !! blank fast-sinking detritus 2D fields 
    473       !!---------------------------------------------------------------------- 
    474       !! 
    475       ffastn(:,:)  = 0.0        !! organic nitrogen 
    476       ffastsi(:,:) = 0.0        !! biogenic silicon 
    477       ffastfe(:,:) = 0.0        !! organic iron 
    478       ffastc(:,:)  = 0.0        !! organic carbon 
    479       ffastca(:,:) = 0.0        !! biogenic calcium carbonate 
    480       !! 
    481       fsedn(:,:)   = 0.0        !! Seafloor flux of N  
    482       fsedsi(:,:)  = 0.0        !! Seafloor flux of Si 
    483       fsedfe(:,:)  = 0.0        !! Seafloor flux of Fe 
    484       fsedc(:,:)   = 0.0        !! Seafloor flux of C 
    485       fsedca(:,:)  = 0.0        !! Seafloor flux of CaCO3 
    486       !! 
    487       fregenfast(:,:)   = 0.0   !! integrated  N regeneration (fast detritus) 
    488       fregenfastsi(:,:) = 0.0   !! integrated Si regeneration (fast detritus) 
     516    ftot_n(:,:)   = 0.0       !! N inventory  
     517    ftot_si(:,:)  = 0.0       !! Si inventory 
     518    ftot_fe(:,:)  = 0.0       !! Fe inventory 
     519    ftot_pn(:,:)  = 0.0       !! integrated non-diatom phytoplankton 
     520    ftot_pd(:,:)  = 0.0       !! integrated diatom     phytoplankton 
     521    ftot_zmi(:,:) = 0.0       !! integrated microzooplankton 
     522    ftot_zme(:,:) = 0.0       !! integrated mesozooplankton 
     523    ftot_det(:,:) = 0.0       !! integrated slow detritus, nitrogen 
     524    ftot_dtc(:,:) = 0.0       !! integrated slow detritus, carbon 
     525    !! 
     526    fzmi_i(:,:)  = 0.0        !! material grazed by microzooplankton 
     527    fzmi_o(:,:)  = 0.0        !! ... sum of fate of this material 
     528    fzme_i(:,:)  = 0.0        !! material grazed by  mesozooplankton 
     529    fzme_o(:,:)  = 0.0        !! ... sum of fate of this material 
     530    !! 
     531    f_sbenin_n(:,:)  = 0.0    !! slow detritus N  -> benthic pool 
     532    f_sbenin_fe(:,:) = 0.0    !! slow detritus Fe -> benthic pool 
     533    f_sbenin_c(:,:)  = 0.0    !! slow detritus C  -> benthic pool 
     534    f_fbenin_n(:,:)  = 0.0    !! fast detritus N  -> benthic pool 
     535    f_fbenin_fe(:,:) = 0.0    !! fast detritus Fe -> benthic pool 
     536    f_fbenin_si(:,:) = 0.0    !! fast detritus Si -> benthic pool 
     537    f_fbenin_c(:,:)  = 0.0    !! fast detritus C  -> benthic pool 
     538    f_fbenin_ca(:,:) = 0.0    !! fast detritus Ca -> benthic pool 
     539    !! 
     540    f_benout_n(:,:)  = 0.0    !! benthic N  pool  -> dissolved 
     541    f_benout_fe(:,:) = 0.0    !! benthic Fe pool  -> dissolved 
     542    f_benout_si(:,:) = 0.0    !! benthic Si pool  -> dissolved 
     543    f_benout_c(:,:)  = 0.0    !! benthic C  pool  -> dissolved 
     544    f_benout_ca(:,:) = 0.0    !! benthic Ca pool  -> dissolved 
     545    !! 
     546    f_benout_lyso_ca(:,:) = 0.0 !! benthic Ca pool  -> dissolved (when it shouldn't!) 
     547    !! 
     548    f_runoff(:,:)  = 0.0      !! riverine runoff 
     549    f_riv_n(:,:)   = 0.0      !! riverine N   input  
     550    f_riv_si(:,:)  = 0.0      !! riverine Si  input  
     551    f_riv_c(:,:)   = 0.0      !! riverine C   input  
     552    f_riv_alk(:,:) = 0.0      !! riverine alk input  
     553    !!  
     554    !! Jpalm -- 06-03-2017 -- Forgotten var to init 
     555    f_omarg(:,:) = 0.0        !! 
     556    f_omcal(:,:) = 0.0  
     557    xFree(:,:) = 0.0          !! state variables for iron-ligand system 
     558    fcomm_resp(:,:) = 0.0  
     559    fprn_ml(:,:) = 0.0        !! mixed layer PP diagnostics 
     560    fprd_ml(:,:) = 0.0        !! mixed layer PP diagnostics 
     561 
     562    !!---------------------------------------------------------------------- 
     563    !! allocate and initiate 2D diag 
     564    !!---------------------------------------------------------------------- 
     565    !! 
     566    IF ( lk_iomput .AND. .NOT.  ln_diatrc ) THEN  
     567       !! Juju :: add kt condition !! 
     568       if ( kt == nittrc000 )   CALL trc_nam_iom_medusa !! initialise iom_use test 
     569       !! 
     570       CALL wrk_alloc( jpi, jpj,      zw2d ) 
     571       zw2d(:,:)      = 0.0   !! 
     572       IF ( med_diag%PRN%dgsave ) THEN 
     573          CALL wrk_alloc( jpi, jpj,   fprn2d    ) 
     574          fprn2d(:,:)      = 0.0 !! 
     575       ENDIF 
     576       IF ( med_diag%MPN%dgsave ) THEN 
     577          CALL wrk_alloc( jpi, jpj,   fdpn2d    ) 
     578          fdpn2d(:,:)      = 0.0 !! 
     579       ENDIF 
     580       IF ( med_diag%PRD%dgsave ) THEN 
     581          CALL wrk_alloc( jpi, jpj,   fprd2d    ) 
     582          fprd2d(:,:)      = 0.0 !! 
     583       ENDIF 
     584       IF( med_diag%MPD%dgsave ) THEN 
     585          CALL wrk_alloc( jpi, jpj,   fdpd2d    ) 
     586          fdpd2d(:,:)      = 0.0 !! 
     587       ENDIF 
     588       IF( med_diag%OPAL%dgsave ) THEN 
     589          CALL wrk_alloc( jpi, jpj,   fprds2d    ) 
     590          fprds2d(:,:)      = 0.0 !! 
     591       ENDIF 
     592       IF( med_diag%OPALDISS%dgsave ) THEN 
     593          CALL wrk_alloc( jpi, jpj,   fsdiss2d    ) 
     594          fsdiss2d(:,:)      = 0.0 !! 
     595       ENDIF 
     596       IF( med_diag%GMIPn%dgsave ) THEN 
     597          CALL wrk_alloc( jpi, jpj,   fgmipn2d    ) 
     598          fgmipn2d(:,:)      = 0.0 !! 
     599       ENDIF 
     600       IF( med_diag%GMID%dgsave ) THEN 
     601          CALL wrk_alloc( jpi, jpj,   fgmid2d    ) 
     602          fgmid2d(:,:)      = 0.0 !! 
     603       ENDIF 
     604       IF( med_diag%MZMI%dgsave ) THEN 
     605          CALL wrk_alloc( jpi, jpj,   fdzmi2d    ) 
     606          fdzmi2d(:,:)      = 0.0 !! 
     607       ENDIF 
     608       IF( med_diag%GMEPN%dgsave ) THEN 
     609          CALL wrk_alloc( jpi, jpj,   fgmepn2d    ) 
     610          fgmepn2d(:,:)      = 0.0 !! 
     611       ENDIF 
     612       IF( med_diag%GMEPD%dgsave ) THEN 
     613          CALL wrk_alloc( jpi, jpj,   fgmepd2d    ) 
     614          fgmepd2d(:,:)      = 0.0 !! 
     615       ENDIF 
     616       IF( med_diag%GMEZMI%dgsave ) THEN 
     617          CALL wrk_alloc( jpi, jpj,   fgmezmi2d    ) 
     618          fgmezmi2d(:,:)      = 0.0 !! 
     619       ENDIF 
     620       IF( med_diag%GMED%dgsave ) THEN 
     621          CALL wrk_alloc( jpi, jpj,   fgmed2d    ) 
     622          fgmed2d(:,:)      = 0.0 !! 
     623       ENDIF 
     624       IF( med_diag%MZME%dgsave ) THEN 
     625          CALL wrk_alloc( jpi, jpj,   fdzme2d    ) 
     626          fdzme2d(:,:)      = 0.0 !! 
     627       ENDIF 
     628       IF( med_diag%DETN%dgsave ) THEN 
     629          CALL wrk_alloc( jpi, jpj,   fslown2d    ) 
     630          fslown2d(:,:)      = 0.0 !! 
     631       ENDIF 
     632       IF( med_diag%MDET%dgsave ) THEN 
     633          CALL wrk_alloc( jpi, jpj,   fdd2d    ) 
     634          fdd2d(:,:)      = 0.0 !! 
     635       ENDIF 
     636       IF( med_diag%AEOLIAN%dgsave ) THEN 
     637          CALL wrk_alloc( jpi, jpj,   ffetop2d    ) 
     638          ffetop2d(:,:)      = 0.0 !! 
     639       ENDIF 
     640       IF( med_diag%BENTHIC%dgsave ) THEN 
     641          CALL wrk_alloc( jpi, jpj,    ffebot2d   ) 
     642          ffebot2d(:,:)      = 0.0 !! 
     643       ENDIF 
     644       IF( med_diag%SCAVENGE%dgsave ) THEN 
     645          CALL wrk_alloc( jpi, jpj,   ffescav2d    ) 
     646          ffescav2d(:,:)      = 0.0 !! 
     647       ENDIF 
     648       IF( med_diag%PN_JLIM%dgsave ) THEN 
     649          CALL wrk_alloc( jpi, jpj,   fjln2d    ) 
     650          fjln2d(:,:)      = 0.0 !! 
     651       ENDIF 
     652       IF( med_diag%PN_NLIM%dgsave ) THEN 
     653          CALL wrk_alloc( jpi, jpj,   fnln2d    ) 
     654          fnln2d(:,:)      = 0.0 !! 
     655       ENDIF 
     656       IF( med_diag%PN_FELIM%dgsave ) THEN 
     657          CALL wrk_alloc( jpi, jpj,   ffln2d    ) 
     658          ffln2d(:,:)      = 0.0 !! 
     659       ENDIF 
     660       IF( med_diag%PD_JLIM%dgsave ) THEN 
     661          CALL wrk_alloc( jpi, jpj,   fjld2d    ) 
     662          fjld2d(:,:)      = 0.0 !! 
     663       ENDIF 
     664       IF( med_diag%PD_NLIM%dgsave ) THEN 
     665          CALL wrk_alloc( jpi, jpj,   fnld2d    ) 
     666          fnld2d(:,:)      = 0.0 !! 
     667       ENDIF 
     668       IF( med_diag%PD_FELIM%dgsave ) THEN 
     669          CALL wrk_alloc( jpi, jpj,   ffld2d    ) 
     670          ffld2d(:,:)      = 0.0 !! 
     671       ENDIF 
     672       IF( med_diag%PD_SILIM%dgsave ) THEN 
     673          CALL wrk_alloc( jpi, jpj,   fsld2d2    ) 
     674          fsld2d2(:,:)      = 0.0 !! 
     675       ENDIF 
     676       IF( med_diag%PDSILIM2%dgsave ) THEN 
     677          CALL wrk_alloc( jpi, jpj,   fsld2d    ) 
     678          fsld2d(:,:)      = 0.0 !! 
     679       ENDIF 
     680       !! 
     681       !! skip SDT_XXXX diagnostics here 
     682       !! 
     683       IF( med_diag%TOTREG_N%dgsave ) THEN 
     684          CALL wrk_alloc( jpi, jpj,   fregen2d    ) 
     685          fregen2d(:,:)      = 0.0 !! 
     686       ENDIF 
     687       IF( med_diag%TOTRG_SI%dgsave ) THEN 
     688          CALL wrk_alloc( jpi, jpj,   fregensi2d    ) 
     689          fregensi2d(:,:)      = 0.0 !! 
     690       ENDIF 
     691       !! 
     692       !! skip REG_XXXX diagnostics here 
     693       !! 
     694       IF( med_diag%FASTN%dgsave ) THEN 
     695          CALL wrk_alloc( jpi, jpj,   ftempn2d    ) 
     696          ftempn2d(:,:)      = 0.0 !! 
     697       ENDIF 
     698       IF( med_diag%FASTSI%dgsave ) THEN 
     699          CALL wrk_alloc( jpi, jpj,   ftempsi2d    ) 
     700          ftempsi2d(:,:)      = 0.0 !! 
     701       ENDIF 
     702       IF( med_diag%FASTFE%dgsave ) THEN 
     703          CALL wrk_alloc( jpi, jpj,  ftempfe2d     ) 
     704          ftempfe2d(:,:)      = 0.0 !! 
     705       ENDIF 
     706       IF( med_diag%FASTC%dgsave ) THEN 
     707          CALL wrk_alloc( jpi, jpj,  ftempc2d     ) 
     708          ftempc2d(:,:)      = 0.0 !! 
     709       ENDIF 
     710       IF( med_diag%FASTCA%dgsave ) THEN 
     711          CALL wrk_alloc( jpi, jpj,   ftempca2d    ) 
     712          ftempca2d(:,:)      = 0.0 !! 
     713       ENDIF 
     714       !! 
     715       !! skip FDT_XXXX, RG_XXXXF, FDS_XXXX, RGS_XXXXF diagnostics here 
     716       !! 
     717       IF( med_diag%REMINN%dgsave ) THEN 
     718          CALL wrk_alloc( jpi, jpj,    freminn2d   ) 
     719          freminn2d(:,:)      = 0.0 !! 
     720       ENDIF 
     721       IF( med_diag%REMINSI%dgsave ) THEN 
     722          CALL wrk_alloc( jpi, jpj,    freminsi2d   ) 
     723          freminsi2d(:,:)      = 0.0 !! 
     724       ENDIF 
     725       IF( med_diag%REMINFE%dgsave ) THEN 
     726          CALL wrk_alloc( jpi, jpj,    freminfe2d   ) 
     727          freminfe2d(:,:)      = 0.0 !! 
     728       ENDIF 
     729       IF( med_diag%REMINC%dgsave ) THEN 
     730          CALL wrk_alloc( jpi, jpj,   freminc2d    ) 
     731          freminc2d(:,:)      = 0.0 !!  
     732       ENDIF 
     733       IF( med_diag%REMINCA%dgsave ) THEN 
     734          CALL wrk_alloc( jpi, jpj,   freminca2d    ) 
     735          freminca2d(:,:)      = 0.0 !! 
     736       ENDIF 
    489737# if defined key_roam 
    490       fregenfastc(:,:)  = 0.0   !! integrated  C regeneration (fast detritus) 
    491 # endif 
    492       !! 
    493       fccd(:,:)    = 0.0        !! last depth level before CCD 
    494  
    495       !!---------------------------------------------------------------------- 
    496       !! blank nutrient/flux inventories 
    497       !!---------------------------------------------------------------------- 
    498       !! 
    499       fflx_n(:,:)  = 0.0        !! nitrogen flux total 
    500       fflx_si(:,:) = 0.0        !! silicon  flux total 
    501       fflx_fe(:,:) = 0.0        !! iron     flux total 
    502       fifd_n(:,:)  = 0.0        !! nitrogen fast detritus production 
    503       fifd_si(:,:) = 0.0        !! silicon  fast detritus production 
    504       fifd_fe(:,:) = 0.0        !! iron     fast detritus production 
    505       fofd_n(:,:)  = 0.0        !! nitrogen fast detritus remineralisation 
    506       fofd_si(:,:) = 0.0        !! silicon  fast detritus remineralisation 
    507       fofd_fe(:,:) = 0.0        !! iron     fast detritus remineralisation 
    508 # if defined key_roam 
    509       fflx_c(:,:)  = 0.0        !! carbon     flux total 
    510       fflx_a(:,:)  = 0.0        !! alkalinity flux total 
    511       fflx_o2(:,:) = 0.0        !! oxygen     flux total 
    512       ftot_c(:,:)  = 0.0        !! carbon     inventory 
    513       ftot_a(:,:)  = 0.0        !! alkalinity inventory 
    514       ftot_o2(:,:) = 0.0        !! oxygen     inventory 
    515       fifd_c(:,:)  = 0.0        !! carbon     fast detritus production 
    516       fifd_a(:,:)  = 0.0        !! alkalinity fast detritus production 
    517       fifd_o2(:,:) = 0.0        !! oxygen     fast detritus production 
    518       fofd_c(:,:)  = 0.0        !! carbon     fast detritus remineralisation 
    519       fofd_a(:,:)  = 0.0        !! alkalinity fast detritus remineralisation 
    520       fofd_o2(:,:) = 0.0        !! oxygen     fast detritus remineralisation 
    521       !! 
    522       fnit_prod(:,:) = 0.0      !! (organic)   nitrogen production 
    523       fnit_cons(:,:) = 0.0      !! (organic)   nitrogen consumption 
    524       fsil_prod(:,:) = 0.0      !! (inorganic) silicon production 
    525       fsil_cons(:,:) = 0.0      !! (inorganic) silicon consumption 
    526       fcar_prod(:,:) = 0.0      !! (organic)   carbon production 
    527       fcar_cons(:,:) = 0.0      !! (organic)   carbon consumption 
    528       !! 
    529       foxy_prod(:,:) = 0.0      !! oxygen production 
    530       foxy_cons(:,:) = 0.0      !! oxygen consumption 
    531       foxy_anox(:,:) = 0.0      !! unrealised oxygen consumption 
    532       !! 
    533 # endif 
    534       ftot_n(:,:)   = 0.0       !! N inventory  
    535       ftot_si(:,:)  = 0.0       !! Si inventory 
    536       ftot_fe(:,:)  = 0.0       !! Fe inventory 
    537       ftot_pn(:,:)  = 0.0       !! integrated non-diatom phytoplankton 
    538       ftot_pd(:,:)  = 0.0       !! integrated diatom     phytoplankton 
    539       ftot_zmi(:,:) = 0.0       !! integrated microzooplankton 
    540       ftot_zme(:,:) = 0.0       !! integrated mesozooplankton 
    541       ftot_det(:,:) = 0.0       !! integrated slow detritus, nitrogen 
    542       ftot_dtc(:,:) = 0.0       !! integrated slow detritus, carbon 
    543       !! 
    544       fzmi_i(:,:)  = 0.0        !! material grazed by microzooplankton 
    545       fzmi_o(:,:)  = 0.0        !! ... sum of fate of this material 
    546       fzme_i(:,:)  = 0.0        !! material grazed by  mesozooplankton 
    547       fzme_o(:,:)  = 0.0        !! ... sum of fate of this material 
    548       !! 
    549       f_sbenin_n(:,:)  = 0.0    !! slow detritus N  -> benthic pool 
    550       f_sbenin_fe(:,:) = 0.0    !! slow detritus Fe -> benthic pool 
    551       f_sbenin_c(:,:)  = 0.0    !! slow detritus C  -> benthic pool 
    552       f_fbenin_n(:,:)  = 0.0    !! fast detritus N  -> benthic pool 
    553       f_fbenin_fe(:,:) = 0.0    !! fast detritus Fe -> benthic pool 
    554       f_fbenin_si(:,:) = 0.0    !! fast detritus Si -> benthic pool 
    555       f_fbenin_c(:,:)  = 0.0    !! fast detritus C  -> benthic pool 
    556       f_fbenin_ca(:,:) = 0.0    !! fast detritus Ca -> benthic pool 
    557       !! 
    558       f_benout_n(:,:)  = 0.0    !! benthic N  pool  -> dissolved 
    559       f_benout_fe(:,:) = 0.0    !! benthic Fe pool  -> dissolved 
    560       f_benout_si(:,:) = 0.0    !! benthic Si pool  -> dissolved 
    561       f_benout_c(:,:)  = 0.0    !! benthic C  pool  -> dissolved 
    562       f_benout_ca(:,:) = 0.0    !! benthic Ca pool  -> dissolved 
    563       !! 
    564       f_benout_lyso_ca(:,:) = 0.0 !! benthic Ca pool  -> dissolved (when it shouldn't!) 
    565       !! 
    566       f_runoff(:,:)  = 0.0      !! riverine runoff 
    567       f_riv_n(:,:)   = 0.0      !! riverine N   input  
    568       f_riv_si(:,:)  = 0.0      !! riverine Si  input  
    569       f_riv_c(:,:)   = 0.0      !! riverine C   input  
    570       f_riv_alk(:,:) = 0.0      !! riverine alk input  
    571       !!  
    572       !! Jpalm -- 06-03-2017 -- Forgotten var to init 
    573       f_omarg(:,:) = 0.0        !! 
    574       f_omcal(:,:) = 0.0  
    575       xFree(:,:) = 0.0          !! state variables for iron-ligand system 
    576       fcomm_resp(:,:) = 0.0  
    577       fprn_ml(:,:) = 0.0        !! mixed layer PP diagnostics 
    578       fprd_ml(:,:) = 0.0        !! mixed layer PP diagnostics 
    579  
    580       !! 
    581       !! allocate and initiate 2D diag 
    582       !! ----------------------------- 
    583       !! Juju :: add kt condition !! 
    584       IF ( lk_iomput .AND. .NOT.  ln_diatrc ) THEN  
    585          !! 
    586          if ( kt == nittrc000 )   CALL trc_nam_iom_medusa !! initialise iom_use test 
    587          !! 
    588          CALL wrk_alloc( jpi, jpj,      zw2d ) 
    589          zw2d(:,:)      = 0.0   !! 
    590          IF ( med_diag%PRN%dgsave ) THEN 
    591             CALL wrk_alloc( jpi, jpj,   fprn2d    ) 
    592             fprn2d(:,:)      = 0.0 !! 
    593          ENDIF 
    594          IF ( med_diag%MPN%dgsave ) THEN 
    595             CALL wrk_alloc( jpi, jpj,   fdpn2d    ) 
    596             fdpn2d(:,:)      = 0.0 !! 
    597          ENDIF 
    598          IF ( med_diag%PRD%dgsave ) THEN 
    599             CALL wrk_alloc( jpi, jpj,   fprd2d    ) 
    600             fprd2d(:,:)      = 0.0 !! 
    601          ENDIF 
    602          IF( med_diag%MPD%dgsave ) THEN 
    603             CALL wrk_alloc( jpi, jpj,   fdpd2d    ) 
    604             fdpd2d(:,:)      = 0.0 !! 
    605          ENDIF 
    606          IF( med_diag%OPAL%dgsave ) THEN 
    607             CALL wrk_alloc( jpi, jpj,   fprds2d    ) 
    608             fprds2d(:,:)      = 0.0 !! 
    609          ENDIF 
    610          IF( med_diag%OPALDISS%dgsave ) THEN 
    611             CALL wrk_alloc( jpi, jpj,   fsdiss2d    ) 
    612             fsdiss2d(:,:)      = 0.0 !! 
    613          ENDIF 
    614          IF( med_diag%GMIPn%dgsave ) THEN 
    615             CALL wrk_alloc( jpi, jpj,   fgmipn2d    ) 
    616             fgmipn2d(:,:)      = 0.0 !! 
    617          ENDIF 
    618          IF( med_diag%GMID%dgsave ) THEN 
    619             CALL wrk_alloc( jpi, jpj,   fgmid2d    ) 
    620             fgmid2d(:,:)      = 0.0 !! 
    621          ENDIF 
    622          IF( med_diag%MZMI%dgsave ) THEN 
    623             CALL wrk_alloc( jpi, jpj,   fdzmi2d    ) 
    624             fdzmi2d(:,:)      = 0.0 !! 
    625          ENDIF 
    626          IF( med_diag%GMEPN%dgsave ) THEN 
    627             CALL wrk_alloc( jpi, jpj,   fgmepn2d    ) 
    628             fgmepn2d(:,:)      = 0.0 !! 
    629          ENDIF 
    630          IF( med_diag%GMEPD%dgsave ) THEN 
    631             CALL wrk_alloc( jpi, jpj,   fgmepd2d    ) 
    632             fgmepd2d(:,:)      = 0.0 !! 
    633          ENDIF 
    634          IF( med_diag%GMEZMI%dgsave ) THEN 
    635             CALL wrk_alloc( jpi, jpj,   fgmezmi2d    ) 
    636             fgmezmi2d(:,:)      = 0.0 !! 
    637          ENDIF 
    638          IF( med_diag%GMED%dgsave ) THEN 
    639             CALL wrk_alloc( jpi, jpj,   fgmed2d    ) 
    640             fgmed2d(:,:)      = 0.0 !! 
    641          ENDIF 
    642          IF( med_diag%MZME%dgsave ) THEN 
    643             CALL wrk_alloc( jpi, jpj,   fdzme2d    ) 
    644             fdzme2d(:,:)      = 0.0 !! 
    645          ENDIF 
    646          IF( med_diag%DETN%dgsave ) THEN 
    647             CALL wrk_alloc( jpi, jpj,   fslown2d    ) 
    648             fslown2d(:,:)      = 0.0 !! 
    649          ENDIF 
    650          IF( med_diag%MDET%dgsave ) THEN 
    651             CALL wrk_alloc( jpi, jpj,   fdd2d    ) 
    652             fdd2d(:,:)      = 0.0 !! 
    653          ENDIF       
    654          IF( med_diag%AEOLIAN%dgsave ) THEN 
    655             CALL wrk_alloc( jpi, jpj,   ffetop2d    ) 
    656             ffetop2d(:,:)      = 0.0 !! 
    657          ENDIF 
    658          IF( med_diag%BENTHIC%dgsave ) THEN 
    659             CALL wrk_alloc( jpi, jpj,    ffebot2d   ) 
    660             ffebot2d(:,:)      = 0.0 !! 
    661          ENDIF 
    662          IF( med_diag%SCAVENGE%dgsave ) THEN 
    663             CALL wrk_alloc( jpi, jpj,   ffescav2d    ) 
    664             ffescav2d(:,:)      = 0.0 !! 
    665          ENDIF 
    666          IF( med_diag%PN_JLIM%dgsave ) THEN 
    667             CALL wrk_alloc( jpi, jpj,   fjln2d    ) 
    668             fjln2d(:,:)      = 0.0 !! 
    669          ENDIF 
    670          IF( med_diag%PN_NLIM%dgsave ) THEN 
    671             CALL wrk_alloc( jpi, jpj,   fnln2d    ) 
    672             fnln2d(:,:)      = 0.0 !! 
    673          ENDIF 
    674          IF( med_diag%PN_FELIM%dgsave ) THEN 
    675             CALL wrk_alloc( jpi, jpj,   ffln2d    ) 
    676             ffln2d(:,:)      = 0.0 !! 
    677          ENDIF 
    678          IF( med_diag%PD_JLIM%dgsave ) THEN 
    679             CALL wrk_alloc( jpi, jpj,   fjld2d    ) 
    680             fjld2d(:,:)      = 0.0 !! 
    681          ENDIF 
    682          IF( med_diag%PD_NLIM%dgsave ) THEN 
    683             CALL wrk_alloc( jpi, jpj,   fnld2d    ) 
    684             fnld2d(:,:)      = 0.0 !! 
    685          ENDIF 
    686          IF( med_diag%PD_FELIM%dgsave ) THEN 
    687             CALL wrk_alloc( jpi, jpj,   ffld2d    ) 
    688             ffld2d(:,:)      = 0.0 !! 
    689          ENDIF 
    690          IF( med_diag%PD_SILIM%dgsave ) THEN 
    691             CALL wrk_alloc( jpi, jpj,   fsld2d2    ) 
    692             fsld2d2(:,:)      = 0.0 !! 
    693          ENDIF 
    694          IF( med_diag%PDSILIM2%dgsave ) THEN 
    695             CALL wrk_alloc( jpi, jpj,   fsld2d    ) 
    696             fsld2d(:,:)      = 0.0 !! 
    697          ENDIF 
    698 !! 
    699 !! skip SDT_XXXX diagnostics here 
    700 !! 
    701          IF( med_diag%TOTREG_N%dgsave ) THEN 
    702             CALL wrk_alloc( jpi, jpj,   fregen2d    ) 
    703             fregen2d(:,:)      = 0.0 !! 
    704          ENDIF 
    705          IF( med_diag%TOTRG_SI%dgsave ) THEN 
    706             CALL wrk_alloc( jpi, jpj,   fregensi2d    ) 
    707             fregensi2d(:,:)      = 0.0 !! 
    708          ENDIF 
    709 !! 
    710 !! skip REG_XXXX diagnostics here 
    711 !! 
    712          IF( med_diag%FASTN%dgsave ) THEN 
    713             CALL wrk_alloc( jpi, jpj,   ftempn2d    ) 
    714             ftempn2d(:,:)      = 0.0 !! 
    715          ENDIF 
    716          IF( med_diag%FASTSI%dgsave ) THEN 
    717             CALL wrk_alloc( jpi, jpj,   ftempsi2d    ) 
    718             ftempsi2d(:,:)      = 0.0 !! 
    719          ENDIF 
    720          IF( med_diag%FASTFE%dgsave ) THEN 
    721             CALL wrk_alloc( jpi, jpj,  ftempfe2d     ) 
    722             ftempfe2d(:,:)      = 0.0 !! 
    723          ENDIF 
    724          IF( med_diag%FASTC%dgsave ) THEN 
    725             CALL wrk_alloc( jpi, jpj,  ftempc2d     ) 
    726             ftempc2d(:,:)      = 0.0 !! 
    727          ENDIF 
    728          IF( med_diag%FASTCA%dgsave ) THEN 
    729             CALL wrk_alloc( jpi, jpj,   ftempca2d    ) 
    730             ftempca2d(:,:)      = 0.0 !! 
    731          ENDIF      
    732 !! 
    733 !! skip FDT_XXXX, RG_XXXXF, FDS_XXXX, RGS_XXXXF diagnostics here 
    734 !! 
    735          IF( med_diag%REMINN%dgsave ) THEN 
    736             CALL wrk_alloc( jpi, jpj,    freminn2d   ) 
    737             freminn2d(:,:)      = 0.0 !! 
    738          ENDIF 
    739          IF( med_diag%REMINSI%dgsave ) THEN 
    740             CALL wrk_alloc( jpi, jpj,    freminsi2d   ) 
    741             freminsi2d(:,:)      = 0.0 !! 
    742          ENDIF 
    743          IF( med_diag%REMINFE%dgsave ) THEN 
    744             CALL wrk_alloc( jpi, jpj,    freminfe2d   ) 
    745             freminfe2d(:,:)      = 0.0 !! 
    746          ENDIF 
    747          IF( med_diag%REMINC%dgsave ) THEN 
    748             CALL wrk_alloc( jpi, jpj,   freminc2d    ) 
    749             freminc2d(:,:)      = 0.0 !!  
    750          ENDIF 
    751          IF( med_diag%REMINCA%dgsave ) THEN 
    752             CALL wrk_alloc( jpi, jpj,   freminca2d    ) 
    753             freminca2d(:,:)      = 0.0 !! 
    754          ENDIF 
    755 # if defined key_roam 
    756 !! 
    757 !! skip SEAFLRXX, MED_XXXX, INTFLX_XX, INT_XX, ML_XXX, OCAL_XXX, FE_XXXX, MED_XZE, WIND diagnostics here 
    758 !! 
    759          IF( med_diag%RR_0100%dgsave ) THEN 
    760             CALL wrk_alloc( jpi, jpj,    ffastca2d   ) 
    761             ffastca2d(:,:)      = 0.0 !! 
    762          ENDIF 
    763  
    764          IF( med_diag%ATM_PCO2%dgsave ) THEN 
    765             CALL wrk_alloc( jpi, jpj,    f_pco2a2d   ) 
    766             f_pco2a2d(:,:)      = 0.0 !! 
    767          ENDIF 
    768 !! 
    769 !! skip OCN_PH diagnostic here 
    770 !! 
    771          IF( med_diag%OCN_PCO2%dgsave ) THEN 
    772             CALL wrk_alloc( jpi, jpj,    f_pco2w2d   ) 
    773             f_pco2w2d(:,:)      = 0.0 !! 
    774          ENDIF 
    775 !! 
    776 !! skip OCNH2CO3, OCN_HCO3, OCN_CO3 diagnostics here 
    777 !! 
    778          IF( med_diag%CO2FLUX%dgsave ) THEN 
    779             CALL wrk_alloc( jpi, jpj,   f_co2flux2d    ) 
    780             f_co2flux2d(:,:)      = 0.0 !! 
    781          ENDIF 
    782 !! 
    783 !! skip OM_XXX diagnostics here 
    784 !! 
    785          IF( med_diag%TCO2%dgsave ) THEN 
    786             CALL wrk_alloc( jpi, jpj,   f_TDIC2d    ) 
    787             f_TDIC2d(:,:)      = 0.0 !! 
    788          ENDIF 
    789          IF( med_diag%TALK%dgsave ) THEN 
    790             CALL wrk_alloc( jpi, jpj,    f_TALK2d   ) 
    791             f_TALK2d(:,:)      = 0.0 !! 
    792          ENDIF 
    793          IF( med_diag%KW660%dgsave ) THEN 
    794             CALL wrk_alloc( jpi, jpj,    f_kw6602d   ) 
    795             f_kw6602d(:,:)      = 0.0 !! 
    796          ENDIF 
    797          IF( med_diag%ATM_PP0%dgsave ) THEN 
    798             CALL wrk_alloc( jpi, jpj,    f_pp02d   ) 
    799             f_pp02d(:,:)      = 0.0 !! 
    800          ENDIF 
    801          IF( med_diag%O2FLUX%dgsave ) THEN 
    802             CALL wrk_alloc( jpi, jpj,   f_o2flux2d    ) 
    803             f_o2flux2d(:,:)      = 0.0 !! 
    804          ENDIF 
    805          IF( med_diag%O2SAT%dgsave ) THEN 
    806             CALL wrk_alloc( jpi, jpj,    f_o2sat2d   ) 
    807             f_o2sat2d(:,:)      = 0.0 !! 
    808          ENDIF  
    809 !! 
    810 !! skip XXX_CCD diagnostics here 
    811 !!  
    812          IF( med_diag%SFR_OCAL%dgsave ) THEN 
    813             CALL wrk_alloc( jpi, jpj,    sfr_ocal2d  ) 
    814             sfr_ocal2d(:,:)      = 0.0 !! 
    815          ENDIF 
    816          IF( med_diag%SFR_OARG%dgsave ) THEN 
    817             CALL wrk_alloc( jpi, jpj,    sfr_oarg2d  ) 
    818             sfr_oarg2d(:,:)      = 0.0 !! 
    819          ENDIF 
    820 !! 
    821 !! skip XX_PROD, XX_CONS, O2_ANOX, RR_XXXX diagnostics here 
    822 !!  
    823          IF( med_diag%IBEN_N%dgsave ) THEN 
    824             CALL wrk_alloc( jpi, jpj,    iben_n2d  ) 
    825             iben_n2d(:,:)      = 0.0 !! 
    826          ENDIF 
    827          IF( med_diag%IBEN_FE%dgsave ) THEN 
    828             CALL wrk_alloc( jpi, jpj,   iben_fe2d   ) 
    829             iben_fe2d(:,:)      = 0.0 !! 
    830          ENDIF 
    831          IF( med_diag%IBEN_C%dgsave ) THEN 
    832             CALL wrk_alloc( jpi, jpj,   iben_c2d   ) 
    833             iben_c2d(:,:)      = 0.0 !! 
    834          ENDIF 
    835          IF( med_diag%IBEN_SI%dgsave ) THEN 
    836             CALL wrk_alloc( jpi, jpj,   iben_si2d   ) 
    837             iben_si2d(:,:)      = 0.0 !! 
    838          ENDIF 
    839          IF( med_diag%IBEN_CA%dgsave ) THEN 
    840             CALL wrk_alloc( jpi, jpj,   iben_ca2d   ) 
    841             iben_ca2d(:,:)      = 0.0 !! 
    842          ENDIF 
    843          IF( med_diag%OBEN_N%dgsave ) THEN 
    844             CALL wrk_alloc( jpi, jpj,    oben_n2d  ) 
    845             oben_n2d(:,:)      = 0.0 !! 
    846          ENDIF 
    847          IF( med_diag%OBEN_FE%dgsave ) THEN 
    848             CALL wrk_alloc( jpi, jpj,    oben_fe2d  ) 
    849             oben_fe2d(:,:)      = 0.0 !! 
    850          ENDIF 
    851          IF( med_diag%OBEN_C%dgsave ) THEN 
    852             CALL wrk_alloc( jpi, jpj,    oben_c2d  ) 
    853             oben_c2d(:,:)      = 0.0 !! 
    854          ENDIF 
    855          IF( med_diag%OBEN_SI%dgsave ) THEN 
    856             CALL wrk_alloc( jpi, jpj,    oben_si2d  ) 
    857             oben_si2d(:,:)      = 0.0 !! 
    858          ENDIF 
    859          IF( med_diag%OBEN_CA%dgsave ) THEN 
    860             CALL wrk_alloc( jpi, jpj,    oben_ca2d  ) 
    861             oben_ca2d(:,:)      = 0.0 !! 
    862          ENDIF 
    863 !! 
    864 !! skip BEN_XX diagnostics here 
    865 !! 
    866          IF( med_diag%RIV_N%dgsave ) THEN 
    867             CALL wrk_alloc( jpi, jpj,    rivn2d   ) 
    868             rivn2d(:,:)      = 0.0 !! 
    869          ENDIF 
    870          IF( med_diag%RIV_SI%dgsave ) THEN 
    871             CALL wrk_alloc( jpi, jpj,    rivsi2d   ) 
    872             rivsi2d(:,:)      = 0.0 !! 
    873          ENDIF 
    874          IF( med_diag%RIV_C%dgsave ) THEN 
    875             CALL wrk_alloc( jpi, jpj,   rivc2d    ) 
    876             rivc2d(:,:)      = 0.0 !! 
    877          ENDIF 
    878          IF( med_diag%RIV_ALK%dgsave ) THEN 
    879             CALL wrk_alloc( jpi, jpj,    rivalk2d   ) 
    880             rivalk2d(:,:)      = 0.0 !! 
    881          ENDIF 
    882          IF( med_diag%DETC%dgsave ) THEN 
    883             CALL wrk_alloc( jpi, jpj,    fslowc2d   ) 
    884             fslowc2d(:,:)      = 0.0 !! 
    885          ENDIF  
    886 !! 
    887 !! skip SDC_XXXX, INVTXXX diagnostics here 
    888 !! 
    889          IF( med_diag%LYSO_CA%dgsave ) THEN 
    890             CALL wrk_alloc( jpi, jpj,    lyso_ca2d  ) 
    891             lyso_ca2d(:,:)      = 0.0 !! 
    892          ENDIF 
    893 !! 
    894 !! skip COM_RESP diagnostic here 
    895 !! 
    896          IF( med_diag%PN_LLOSS%dgsave ) THEN 
    897             CALL wrk_alloc( jpi, jpj,    fdpn22d   ) 
    898             fdpn22d(:,:)      = 0.0 !! 
    899          ENDIF 
    900          IF( med_diag%PD_LLOSS%dgsave ) THEN 
    901             CALL wrk_alloc( jpi, jpj,    fdpd22d   ) 
    902             fdpd22d(:,:)      = 0.0 !! 
    903          ENDIF 
    904          IF( med_diag%ZI_LLOSS%dgsave ) THEN 
    905             CALL wrk_alloc( jpi, jpj,    fdzmi22d   ) 
    906             fdzmi22d(:,:)      = 0.0 !! 
    907          ENDIF 
    908          IF( med_diag%ZE_LLOSS%dgsave ) THEN 
    909             CALL wrk_alloc( jpi, jpj,   fdzme22d    ) 
    910             fdzme22d(:,:)      = 0.0 !! 
    911          ENDIF 
    912          IF( med_diag%ZI_MES_N%dgsave ) THEN    
    913             CALL wrk_alloc( jpi, jpj,   zimesn2d    ) 
    914             zimesn2d(:,:)      = 0.0 !! 
    915          ENDIF 
    916          IF( med_diag%ZI_MES_D%dgsave ) THEN 
    917             CALL wrk_alloc( jpi, jpj,    zimesd2d   ) 
    918             zimesd2d(:,:)      = 0.0 !! 
    919          ENDIF 
    920          IF( med_diag%ZI_MES_C%dgsave ) THEN 
    921             CALL wrk_alloc( jpi, jpj,    zimesc2d   ) 
    922             zimesc2d(:,:)      = 0.0 !! 
    923          ENDIF 
    924          IF( med_diag%ZI_MESDC%dgsave ) THEN 
    925             CALL wrk_alloc( jpi, jpj,    zimesdc2d   ) 
    926             zimesdc2d(:,:)      = 0.0 !! 
    927          ENDIF 
    928          IF( med_diag%ZI_EXCR%dgsave ) THEN 
    929             CALL wrk_alloc( jpi, jpj,     ziexcr2d  ) 
    930             ziexcr2d(:,:)      = 0.0 !! 
    931          ENDIF 
    932          IF( med_diag%ZI_RESP%dgsave ) THEN 
    933             CALL wrk_alloc( jpi, jpj,    ziresp2d   ) 
    934             ziresp2d(:,:)      = 0.0 !! 
    935          ENDIF 
    936          IF( med_diag%ZI_GROW%dgsave ) THEN 
    937             CALL wrk_alloc( jpi, jpj,    zigrow2d   ) 
    938             zigrow2d(:,:)      = 0.0 !! 
    939          ENDIF 
    940          IF( med_diag%ZE_MES_N%dgsave ) THEN 
    941             CALL wrk_alloc( jpi, jpj,   zemesn2d    ) 
    942             zemesn2d(:,:)      = 0.0 !! 
    943          ENDIF 
    944          IF( med_diag%ZE_MES_D%dgsave ) THEN 
    945             CALL wrk_alloc( jpi, jpj,    zemesd2d   ) 
    946             zemesd2d(:,:)      = 0.0 !! 
    947          ENDIF 
    948          IF( med_diag%ZE_MES_C%dgsave ) THEN 
    949             CALL wrk_alloc( jpi, jpj,    zemesc2d   ) 
    950             zemesc2d(:,:)      = 0.0 !! 
    951          ENDIF 
    952          IF( med_diag%ZE_MESDC%dgsave ) THEN 
    953             CALL wrk_alloc( jpi, jpj,    zemesdc2d   ) 
    954             zemesdc2d(:,:)      = 0.0 !! 
    955          ENDIF 
    956          IF( med_diag%ZE_EXCR%dgsave ) THEN 
    957             CALL wrk_alloc( jpi, jpj,    zeexcr2d   ) 
    958             zeexcr2d(:,:)      = 0.0 !! 
    959          ENDIF                   
    960          IF( med_diag%ZE_RESP%dgsave ) THEN 
    961             CALL wrk_alloc( jpi, jpj,    zeresp2d   ) 
    962             zeresp2d(:,:)      = 0.0 !! 
    963          ENDIF 
    964          IF( med_diag%ZE_GROW%dgsave ) THEN 
    965             CALL wrk_alloc( jpi, jpj,    zegrow2d   ) 
    966             zegrow2d(:,:)      = 0.0 !! 
    967          ENDIF 
    968          IF( med_diag%MDETC%dgsave ) THEN 
    969             CALL wrk_alloc( jpi, jpj,   mdetc2d    ) 
    970             mdetc2d(:,:)      = 0.0 !! 
    971          ENDIF 
    972          IF( med_diag%GMIDC%dgsave ) THEN 
    973             CALL wrk_alloc( jpi, jpj,    gmidc2d   ) 
    974             gmidc2d(:,:)      = 0.0 !! 
    975          ENDIF 
    976          IF( med_diag%GMEDC%dgsave ) THEN 
    977             CALL wrk_alloc( jpi, jpj,    gmedc2d   ) 
    978             gmedc2d(:,:)      = 0.0 !! 
    979          ENDIF 
    980 !! 
    981 !! skip INT_XXX diagnostics here 
    982 !! 
    983          IF (jdms .eq. 1) THEN 
    984             IF( med_diag%DMS_SURF%dgsave ) THEN 
    985                CALL wrk_alloc( jpi, jpj,   dms_surf2d    ) 
    986                dms_surf2d(:,:)      = 0.0 !! 
    987             ENDIF 
    988             IF( med_diag%DMS_ANDR%dgsave ) THEN 
    989                CALL wrk_alloc( jpi, jpj,   dms_andr2d    ) 
    990                dms_andr2d(:,:)      = 0.0 !! 
    991             ENDIF 
    992             IF( med_diag%DMS_SIMO%dgsave ) THEN 
    993                CALL wrk_alloc( jpi, jpj,  dms_simo2d     ) 
    994                dms_simo2d(:,:)      = 0.0 !! 
    995             ENDIF 
    996             IF( med_diag%DMS_ARAN%dgsave ) THEN 
    997                CALL wrk_alloc( jpi, jpj,   dms_aran2d    ) 
    998                dms_aran2d(:,:)      = 0.0 !! 
    999             ENDIF 
    1000             IF( med_diag%DMS_HALL%dgsave ) THEN 
    1001                CALL wrk_alloc( jpi, jpj,   dms_hall2d    ) 
    1002                dms_hall2d(:,:)      = 0.0 !! 
    1003             ENDIF 
    1004          ENDIF    
    1005          !! 
    1006          !! AXY (24/11/16): extra MOCSY diagnostics, 2D 
    1007          IF( med_diag%ATM_XCO2%dgsave ) THEN 
    1008             CALL wrk_alloc( jpi, jpj, f_xco2a_2d      ) 
    1009             f_xco2a_2d(:,:)      = 0.0 !! 
    1010          ENDIF 
    1011          IF( med_diag%OCN_FCO2%dgsave ) THEN 
    1012             CALL wrk_alloc( jpi, jpj, f_fco2w_2d      ) 
    1013             f_fco2w_2d(:,:)      = 0.0 !! 
    1014          ENDIF 
    1015          IF( med_diag%ATM_FCO2%dgsave ) THEN 
    1016             CALL wrk_alloc( jpi, jpj, f_fco2a_2d      ) 
    1017             f_fco2a_2d(:,:)      = 0.0 !! 
    1018          ENDIF 
    1019          IF( med_diag%OCN_RHOSW%dgsave ) THEN 
    1020             CALL wrk_alloc( jpi, jpj, f_ocnrhosw_2d   ) 
    1021             f_ocnrhosw_2d(:,:)      = 0.0 !! 
    1022          ENDIF 
    1023          IF( med_diag%OCN_SCHCO2%dgsave ) THEN 
    1024             CALL wrk_alloc( jpi, jpj, f_ocnschco2_2d  ) 
    1025             f_ocnschco2_2d(:,:)      = 0.0 !! 
    1026          ENDIF 
    1027          IF( med_diag%OCN_KWCO2%dgsave ) THEN 
    1028             CALL wrk_alloc( jpi, jpj, f_ocnkwco2_2d   ) 
    1029             f_ocnkwco2_2d(:,:)      = 0.0 !! 
    1030          ENDIF 
    1031          IF( med_diag%OCN_K0%dgsave ) THEN 
    1032             CALL wrk_alloc( jpi, jpj, f_ocnk0_2d      ) 
    1033             f_ocnk0_2d(:,:)      = 0.0 !! 
    1034          ENDIF 
    1035          IF( med_diag%CO2STARAIR%dgsave ) THEN 
    1036             CALL wrk_alloc( jpi, jpj, f_co2starair_2d ) 
    1037             f_co2starair_2d(:,:)      = 0.0 !! 
    1038          ENDIF 
    1039          IF( med_diag%OCN_DPCO2%dgsave ) THEN 
    1040             CALL wrk_alloc( jpi, jpj, f_ocndpco2_2d   ) 
    1041             f_ocndpco2_2d(:,:)      = 0.0 !! 
    1042          ENDIF 
     738       !! 
     739       !! skip SEAFLRXX, MED_XXXX, INTFLX_XX, INT_XX, ML_XXX, OCAL_XXX, FE_XXXX, MED_XZE, WIND diagnostics here 
     740       !! 
     741       IF( med_diag%RR_0100%dgsave ) THEN 
     742          CALL wrk_alloc( jpi, jpj,    ffastca2d   ) 
     743          ffastca2d(:,:)      = 0.0 !! 
     744       ENDIF 
     745 
     746       IF( med_diag%ATM_PCO2%dgsave ) THEN 
     747          CALL wrk_alloc( jpi, jpj,    f_pco2a2d   ) 
     748          f_pco2a2d(:,:)      = 0.0 !! 
     749       ENDIF 
     750       !! 
     751       !! skip OCN_PH diagnostic here 
     752       !! 
     753       IF( med_diag%OCN_PCO2%dgsave ) THEN 
     754          CALL wrk_alloc( jpi, jpj,    f_pco2w2d   ) 
     755          f_pco2w2d(:,:)      = 0.0 !! 
     756       ENDIF 
     757       !! 
     758       !! skip OCNH2CO3, OCN_HCO3, OCN_CO3 diagnostics here 
     759       !! 
     760       IF( med_diag%CO2FLUX%dgsave ) THEN 
     761          CALL wrk_alloc( jpi, jpj,   f_co2flux2d    ) 
     762          f_co2flux2d(:,:)      = 0.0 !! 
     763       ENDIF 
     764       !! 
     765       !! skip OM_XXX diagnostics here 
     766       !! 
     767       IF( med_diag%TCO2%dgsave ) THEN 
     768          CALL wrk_alloc( jpi, jpj,   f_TDIC2d    ) 
     769          f_TDIC2d(:,:)      = 0.0 !! 
     770       ENDIF 
     771       IF( med_diag%TALK%dgsave ) THEN 
     772          CALL wrk_alloc( jpi, jpj,    f_TALK2d   ) 
     773          f_TALK2d(:,:)      = 0.0 !! 
     774       ENDIF 
     775       IF( med_diag%KW660%dgsave ) THEN 
     776          CALL wrk_alloc( jpi, jpj,    f_kw6602d   ) 
     777          f_kw6602d(:,:)      = 0.0 !! 
     778       ENDIF 
     779       IF( med_diag%ATM_PP0%dgsave ) THEN 
     780          CALL wrk_alloc( jpi, jpj,    f_pp02d   ) 
     781          f_pp02d(:,:)      = 0.0 !! 
     782       ENDIF 
     783       IF( med_diag%O2FLUX%dgsave ) THEN 
     784          CALL wrk_alloc( jpi, jpj,   f_o2flux2d    ) 
     785          f_o2flux2d(:,:)      = 0.0 !! 
     786       ENDIF 
     787       IF( med_diag%O2SAT%dgsave ) THEN 
     788          CALL wrk_alloc( jpi, jpj,    f_o2sat2d   ) 
     789          f_o2sat2d(:,:)      = 0.0 !! 
     790       ENDIF 
     791       !! 
     792       !! skip XXX_CCD diagnostics here 
     793       !!  
     794       IF( med_diag%SFR_OCAL%dgsave ) THEN 
     795          CALL wrk_alloc( jpi, jpj,    sfr_ocal2d  ) 
     796          sfr_ocal2d(:,:)      = 0.0 !! 
     797       ENDIF 
     798       IF( med_diag%SFR_OARG%dgsave ) THEN 
     799          CALL wrk_alloc( jpi, jpj,    sfr_oarg2d  ) 
     800          sfr_oarg2d(:,:)      = 0.0 !! 
     801       ENDIF 
     802       !! 
     803       !! skip XX_PROD, XX_CONS, O2_ANOX, RR_XXXX diagnostics here 
     804       !!  
     805       IF( med_diag%IBEN_N%dgsave ) THEN 
     806          CALL wrk_alloc( jpi, jpj,    iben_n2d  ) 
     807          iben_n2d(:,:)      = 0.0 !! 
     808       ENDIF 
     809       IF( med_diag%IBEN_FE%dgsave ) THEN 
     810          CALL wrk_alloc( jpi, jpj,   iben_fe2d   ) 
     811          iben_fe2d(:,:)      = 0.0 !! 
     812       ENDIF 
     813       IF( med_diag%IBEN_C%dgsave ) THEN 
     814          CALL wrk_alloc( jpi, jpj,   iben_c2d   ) 
     815          iben_c2d(:,:)      = 0.0 !! 
     816       ENDIF 
     817       IF( med_diag%IBEN_SI%dgsave ) THEN 
     818          CALL wrk_alloc( jpi, jpj,   iben_si2d   ) 
     819          iben_si2d(:,:)      = 0.0 !! 
     820       ENDIF 
     821       IF( med_diag%IBEN_CA%dgsave ) THEN 
     822          CALL wrk_alloc( jpi, jpj,   iben_ca2d   ) 
     823          iben_ca2d(:,:)      = 0.0 !! 
     824       ENDIF 
     825       IF( med_diag%OBEN_N%dgsave ) THEN 
     826          CALL wrk_alloc( jpi, jpj,    oben_n2d  ) 
     827          oben_n2d(:,:)      = 0.0 !! 
     828       ENDIF 
     829       IF( med_diag%OBEN_FE%dgsave ) THEN 
     830          CALL wrk_alloc( jpi, jpj,    oben_fe2d  ) 
     831          oben_fe2d(:,:)      = 0.0 !! 
     832       ENDIF 
     833       IF( med_diag%OBEN_C%dgsave ) THEN 
     834          CALL wrk_alloc( jpi, jpj,    oben_c2d  ) 
     835          oben_c2d(:,:)      = 0.0 !! 
     836       ENDIF 
     837       IF( med_diag%OBEN_SI%dgsave ) THEN 
     838          CALL wrk_alloc( jpi, jpj,    oben_si2d  ) 
     839          oben_si2d(:,:)      = 0.0 !! 
     840       ENDIF 
     841       IF( med_diag%OBEN_CA%dgsave ) THEN 
     842          CALL wrk_alloc( jpi, jpj,    oben_ca2d  ) 
     843          oben_ca2d(:,:)      = 0.0 !! 
     844       ENDIF 
     845       !! 
     846       !! skip BEN_XX diagnostics here 
     847       !! 
     848       IF( med_diag%RIV_N%dgsave ) THEN 
     849          CALL wrk_alloc( jpi, jpj,    rivn2d   ) 
     850          rivn2d(:,:)      = 0.0 !! 
     851       ENDIF 
     852       IF( med_diag%RIV_SI%dgsave ) THEN 
     853          CALL wrk_alloc( jpi, jpj,    rivsi2d   ) 
     854          rivsi2d(:,:)      = 0.0 !! 
     855       ENDIF 
     856       IF( med_diag%RIV_C%dgsave ) THEN 
     857          CALL wrk_alloc( jpi, jpj,   rivc2d    ) 
     858          rivc2d(:,:)      = 0.0 !! 
     859       ENDIF 
     860       IF( med_diag%RIV_ALK%dgsave ) THEN 
     861          CALL wrk_alloc( jpi, jpj,    rivalk2d   ) 
     862          rivalk2d(:,:)      = 0.0 !! 
     863       ENDIF 
     864       IF( med_diag%DETC%dgsave ) THEN 
     865          CALL wrk_alloc( jpi, jpj,    fslowc2d   ) 
     866          fslowc2d(:,:)      = 0.0 !! 
     867       ENDIF 
     868       !! 
     869       !! skip SDC_XXXX, INVTXXX diagnostics here 
     870       !! 
     871       IF( med_diag%LYSO_CA%dgsave ) THEN 
     872          CALL wrk_alloc( jpi, jpj,    lyso_ca2d  ) 
     873          lyso_ca2d(:,:)      = 0.0 !! 
     874       ENDIF 
     875       !! 
     876       !! skip COM_RESP diagnostic here 
     877       !! 
     878       IF( med_diag%PN_LLOSS%dgsave ) THEN 
     879          CALL wrk_alloc( jpi, jpj,    fdpn22d   ) 
     880          fdpn22d(:,:)      = 0.0 !! 
     881       ENDIF 
     882       IF( med_diag%PD_LLOSS%dgsave ) THEN 
     883          CALL wrk_alloc( jpi, jpj,    fdpd22d   ) 
     884          fdpd22d(:,:)      = 0.0 !! 
     885       ENDIF 
     886       IF( med_diag%ZI_LLOSS%dgsave ) THEN 
     887          CALL wrk_alloc( jpi, jpj,    fdzmi22d   ) 
     888          fdzmi22d(:,:)      = 0.0 !! 
     889       ENDIF 
     890       IF( med_diag%ZE_LLOSS%dgsave ) THEN 
     891          CALL wrk_alloc( jpi, jpj,   fdzme22d    ) 
     892          fdzme22d(:,:)      = 0.0 !! 
     893       ENDIF 
     894       IF( med_diag%ZI_MES_N%dgsave ) THEN    
     895          CALL wrk_alloc( jpi, jpj,   zimesn2d    ) 
     896          zimesn2d(:,:)      = 0.0 !! 
     897       ENDIF 
     898       IF( med_diag%ZI_MES_D%dgsave ) THEN 
     899          CALL wrk_alloc( jpi, jpj,    zimesd2d   ) 
     900          zimesd2d(:,:)      = 0.0 !! 
     901       ENDIF 
     902       IF( med_diag%ZI_MES_C%dgsave ) THEN 
     903          CALL wrk_alloc( jpi, jpj,    zimesc2d   ) 
     904          zimesc2d(:,:)      = 0.0 !! 
     905       ENDIF 
     906       IF( med_diag%ZI_MESDC%dgsave ) THEN 
     907          CALL wrk_alloc( jpi, jpj,    zimesdc2d   ) 
     908          zimesdc2d(:,:)      = 0.0 !! 
     909       ENDIF 
     910       IF( med_diag%ZI_EXCR%dgsave ) THEN 
     911          CALL wrk_alloc( jpi, jpj,     ziexcr2d  ) 
     912          ziexcr2d(:,:)      = 0.0 !! 
     913       ENDIF 
     914       IF( med_diag%ZI_RESP%dgsave ) THEN 
     915          CALL wrk_alloc( jpi, jpj,    ziresp2d   ) 
     916          ziresp2d(:,:)      = 0.0 !! 
     917       ENDIF 
     918       IF( med_diag%ZI_GROW%dgsave ) THEN 
     919          CALL wrk_alloc( jpi, jpj,    zigrow2d   ) 
     920          zigrow2d(:,:)      = 0.0 !! 
     921       ENDIF 
     922       IF( med_diag%ZE_MES_N%dgsave ) THEN 
     923          CALL wrk_alloc( jpi, jpj,   zemesn2d    ) 
     924          zemesn2d(:,:)      = 0.0 !! 
     925       ENDIF 
     926       IF( med_diag%ZE_MES_D%dgsave ) THEN 
     927          CALL wrk_alloc( jpi, jpj,    zemesd2d   ) 
     928          zemesd2d(:,:)      = 0.0 !! 
     929       ENDIF 
     930       IF( med_diag%ZE_MES_C%dgsave ) THEN 
     931          CALL wrk_alloc( jpi, jpj,    zemesc2d   ) 
     932          zemesc2d(:,:)      = 0.0 !! 
     933       ENDIF 
     934       IF( med_diag%ZE_MESDC%dgsave ) THEN 
     935          CALL wrk_alloc( jpi, jpj,    zemesdc2d   ) 
     936          zemesdc2d(:,:)      = 0.0 !! 
     937       ENDIF 
     938       IF( med_diag%ZE_EXCR%dgsave ) THEN 
     939          CALL wrk_alloc( jpi, jpj,    zeexcr2d   ) 
     940          zeexcr2d(:,:)      = 0.0 !! 
     941       ENDIF 
     942       IF( med_diag%ZE_RESP%dgsave ) THEN 
     943          CALL wrk_alloc( jpi, jpj,    zeresp2d   ) 
     944          zeresp2d(:,:)      = 0.0 !! 
     945       ENDIF 
     946       IF( med_diag%ZE_GROW%dgsave ) THEN 
     947          CALL wrk_alloc( jpi, jpj,    zegrow2d   ) 
     948          zegrow2d(:,:)      = 0.0 !! 
     949       ENDIF 
     950       IF( med_diag%MDETC%dgsave ) THEN 
     951          CALL wrk_alloc( jpi, jpj,   mdetc2d    ) 
     952          mdetc2d(:,:)      = 0.0 !! 
     953       ENDIF 
     954       IF( med_diag%GMIDC%dgsave ) THEN 
     955          CALL wrk_alloc( jpi, jpj,    gmidc2d   ) 
     956          gmidc2d(:,:)      = 0.0 !! 
     957       ENDIF 
     958       IF( med_diag%GMEDC%dgsave ) THEN 
     959          CALL wrk_alloc( jpi, jpj,    gmedc2d   ) 
     960          gmedc2d(:,:)      = 0.0 !! 
     961       ENDIF 
     962       !! 
     963       !! skip INT_XXX diagnostics here 
     964       !! 
     965       IF (jdms .eq. 1) THEN 
     966          IF( med_diag%DMS_SURF%dgsave ) THEN 
     967             CALL wrk_alloc( jpi, jpj,   dms_surf2d    ) 
     968             dms_surf2d(:,:)      = 0.0 !! 
     969          ENDIF 
     970          IF( med_diag%DMS_ANDR%dgsave ) THEN 
     971             CALL wrk_alloc( jpi, jpj,   dms_andr2d    ) 
     972             dms_andr2d(:,:)      = 0.0 !! 
     973          ENDIF 
     974          IF( med_diag%DMS_SIMO%dgsave ) THEN 
     975             CALL wrk_alloc( jpi, jpj,  dms_simo2d     ) 
     976             dms_simo2d(:,:)      = 0.0 !! 
     977          ENDIF 
     978          IF( med_diag%DMS_ARAN%dgsave ) THEN 
     979             CALL wrk_alloc( jpi, jpj,   dms_aran2d    ) 
     980             dms_aran2d(:,:)      = 0.0 !! 
     981          ENDIF 
     982          IF( med_diag%DMS_HALL%dgsave ) THEN 
     983             CALL wrk_alloc( jpi, jpj,   dms_hall2d    ) 
     984             dms_hall2d(:,:)      = 0.0 !! 
     985          ENDIF 
     986       ENDIF 
     987       !! 
     988       !! AXY (24/11/16): extra MOCSY diagnostics, 2D 
     989       IF( med_diag%ATM_XCO2%dgsave ) THEN 
     990          CALL wrk_alloc( jpi, jpj, f_xco2a_2d      ) 
     991          f_xco2a_2d(:,:)      = 0.0 !! 
     992       ENDIF 
     993       IF( med_diag%OCN_FCO2%dgsave ) THEN 
     994          CALL wrk_alloc( jpi, jpj, f_fco2w_2d      ) 
     995          f_fco2w_2d(:,:)      = 0.0 !! 
     996       ENDIF 
     997       IF( med_diag%ATM_FCO2%dgsave ) THEN 
     998          CALL wrk_alloc( jpi, jpj, f_fco2a_2d      ) 
     999          f_fco2a_2d(:,:)      = 0.0 !! 
     1000       ENDIF 
     1001       IF( med_diag%OCN_RHOSW%dgsave ) THEN 
     1002          CALL wrk_alloc( jpi, jpj, f_ocnrhosw_2d   ) 
     1003          f_ocnrhosw_2d(:,:)      = 0.0 !! 
     1004       ENDIF 
     1005       IF( med_diag%OCN_SCHCO2%dgsave ) THEN 
     1006          CALL wrk_alloc( jpi, jpj, f_ocnschco2_2d  ) 
     1007          f_ocnschco2_2d(:,:)      = 0.0 !! 
     1008       ENDIF 
     1009       IF( med_diag%OCN_KWCO2%dgsave ) THEN 
     1010          CALL wrk_alloc( jpi, jpj, f_ocnkwco2_2d   ) 
     1011          f_ocnkwco2_2d(:,:)      = 0.0 !! 
     1012       ENDIF 
     1013       IF( med_diag%OCN_K0%dgsave ) THEN 
     1014          CALL wrk_alloc( jpi, jpj, f_ocnk0_2d      ) 
     1015          f_ocnk0_2d(:,:)      = 0.0 !! 
     1016       ENDIF 
     1017       IF( med_diag%CO2STARAIR%dgsave ) THEN 
     1018          CALL wrk_alloc( jpi, jpj, f_co2starair_2d ) 
     1019          f_co2starair_2d(:,:)      = 0.0 !! 
     1020       ENDIF 
     1021       IF( med_diag%OCN_DPCO2%dgsave ) THEN 
     1022          CALL wrk_alloc( jpi, jpj, f_ocndpco2_2d   ) 
     1023          f_ocndpco2_2d(:,:)      = 0.0 !! 
     1024       ENDIF 
    10431025# endif   
    1044          IF( med_diag%TPP3%dgsave ) THEN 
    1045             CALL wrk_alloc( jpi, jpj, jpk,       tpp3d ) 
    1046             tpp3d(:,:,:)      = 0.0 !!  
    1047          ENDIF 
    1048          IF( med_diag%DETFLUX3%dgsave ) THEN 
    1049             CALL wrk_alloc( jpi, jpj, jpk,        detflux3d ) 
    1050             detflux3d(:,:,:)      = 0.0 !!  
    1051          ENDIF 
    1052          IF( med_diag%REMIN3N%dgsave ) THEN 
    1053              CALL wrk_alloc( jpi, jpj, jpk,        remin3dn ) 
    1054              remin3dn(:,:,:)      = 0.0 !!  
    1055           ENDIF 
    1056           !!  
    1057           !! AXY (10/11/16): CMIP6 diagnostics, 2D 
    1058           !! JPALM -- 17-11-16 -- put fgco2 alloc out of diag request 
    1059           !!                   needed for coupling/passed through restart 
    1060           !! IF( med_diag%FGCO2%dgsave ) THEN 
    1061              CALL wrk_alloc( jpi, jpj,   fgco2    ) 
    1062              fgco2(:,:)      = 0.0 !! 
    1063           !! ENDIF 
    1064           IF( med_diag%INTDISSIC%dgsave ) THEN 
    1065              CALL wrk_alloc( jpi, jpj,   intdissic    ) 
    1066              intdissic(:,:)  = 0.0 !! 
    1067           ENDIF           
    1068           IF( med_diag%INTDISSIN%dgsave ) THEN 
    1069              CALL wrk_alloc( jpi, jpj,   intdissin    ) 
    1070              intdissin(:,:)  = 0.0 !! 
    1071           ENDIF           
    1072           IF( med_diag%INTDISSISI%dgsave ) THEN 
    1073              CALL wrk_alloc( jpi, jpj,   intdissisi    ) 
    1074              intdissisi(:,:)  = 0.0 !! 
    1075           ENDIF           
    1076           IF( med_diag%INTTALK%dgsave ) THEN 
    1077              CALL wrk_alloc( jpi, jpj,   inttalk    ) 
    1078              inttalk(:,:)  = 0.0 !! 
    1079           ENDIF           
    1080           IF( med_diag%O2min%dgsave ) THEN 
    1081              CALL wrk_alloc( jpi, jpj,   o2min    ) 
    1082              o2min(:,:)  = 1.e3 !! set to high value as we're looking for min(o2) 
    1083           ENDIF           
    1084           IF( med_diag%ZO2min%dgsave ) THEN 
    1085              CALL wrk_alloc( jpi, jpj,   zo2min    ) 
    1086              zo2min(:,:)  = 0.0 !! 
    1087           ENDIF           
    1088           IF( med_diag%FBDDTALK%dgsave  ) THEN 
    1089              CALL wrk_alloc( jpi, jpj, fbddtalk  ) 
    1090              fbddtalk(:,:)  = 0.0 !!  
    1091           ENDIF 
    1092           IF( med_diag%FBDDTDIC%dgsave  ) THEN 
    1093              CALL wrk_alloc( jpi, jpj, fbddtdic  ) 
    1094              fbddtdic(:,:)  = 0.0 !!  
    1095           ENDIF 
    1096           IF( med_diag%FBDDTDIFE%dgsave ) THEN 
    1097              CALL wrk_alloc( jpi, jpj, fbddtdife ) 
    1098              fbddtdife(:,:) = 0.0 !!  
    1099           ENDIF 
    1100           IF( med_diag%FBDDTDIN%dgsave  ) THEN 
    1101              CALL wrk_alloc( jpi, jpj, fbddtdin  ) 
    1102              fbddtdin(:,:)  = 0.0 !!  
    1103           ENDIF 
    1104           IF( med_diag%FBDDTDISI%dgsave ) THEN 
    1105              CALL wrk_alloc( jpi, jpj, fbddtdisi ) 
    1106              fbddtdisi(:,:) = 0.0 !!  
    1107           ENDIF 
    1108           !!  
    1109           !! AXY (10/11/16): CMIP6 diagnostics, 3D 
    1110           IF( med_diag%TPPD3%dgsave     ) THEN 
    1111              CALL wrk_alloc( jpi, jpj, jpk, tppd3     ) 
    1112              tppd3(:,:,:)     = 0.0 !!  
    1113           ENDIF 
    1114           IF( med_diag%BDDTALK3%dgsave  ) THEN 
    1115              CALL wrk_alloc( jpi, jpj, jpk, bddtalk3  ) 
    1116              bddtalk3(:,:,:)  = 0.0 !!  
    1117           ENDIF 
    1118           IF( med_diag%BDDTDIC3%dgsave  ) THEN 
    1119              CALL wrk_alloc( jpi, jpj, jpk, bddtdic3  ) 
    1120              bddtdic3(:,:,:)  = 0.0 !!  
    1121           ENDIF 
    1122           IF( med_diag%BDDTDIFE3%dgsave ) THEN 
    1123              CALL wrk_alloc( jpi, jpj, jpk, bddtdife3 ) 
    1124              bddtdife3(:,:,:) = 0.0 !!  
    1125           ENDIF 
    1126           IF( med_diag%BDDTDIN3%dgsave  ) THEN 
    1127              CALL wrk_alloc( jpi, jpj, jpk, bddtdin3  ) 
    1128              bddtdin3(:,:,:)  = 0.0 !!  
    1129           ENDIF 
    1130           IF( med_diag%BDDTDISI3%dgsave ) THEN 
    1131              CALL wrk_alloc( jpi, jpj, jpk, bddtdisi3 ) 
    1132              bddtdisi3(:,:,:) = 0.0 !!  
    1133           ENDIF 
    1134           IF( med_diag%FD_NIT3%dgsave   ) THEN 
    1135              CALL wrk_alloc( jpi, jpj, jpk, fd_nit3   ) 
    1136              fd_nit3(:,:,:)   = 0.0 !!  
    1137           ENDIF 
    1138           IF( med_diag%FD_SIL3%dgsave   ) THEN 
    1139              CALL wrk_alloc( jpi, jpj, jpk, fd_sil3   ) 
    1140              fd_sil3(:,:,:)   = 0.0 !!  
    1141           ENDIF 
    1142           IF( med_diag%FD_CAR3%dgsave   ) THEN 
    1143              CALL wrk_alloc( jpi, jpj, jpk, fd_car3   ) 
    1144              fd_car3(:,:,:)   = 0.0 !!  
    1145           ENDIF 
    1146           IF( med_diag%FD_CAL3%dgsave   ) THEN 
    1147              CALL wrk_alloc( jpi, jpj, jpk, fd_cal3   ) 
    1148              fd_cal3(:,:,:)   = 0.0 !!  
    1149           ENDIF 
    1150           IF( med_diag%DCALC3%dgsave    ) THEN 
    1151              CALL wrk_alloc( jpi, jpj, jpk, dcalc3    ) 
    1152              dcalc3(:,:,: )   = 0.0 !!  
    1153           ENDIF 
    1154           IF( med_diag%EXPC3%dgsave     ) THEN 
    1155              CALL wrk_alloc( jpi, jpj, jpk, expc3   ) 
    1156              expc3(:,:,: )    = 0.0 !!  
    1157           ENDIF 
    1158           IF( med_diag%EXPN3%dgsave     ) THEN 
    1159              CALL wrk_alloc( jpi, jpj, jpk, expn3   ) 
    1160              expn3(:,:,: )    = 0.0 !!  
    1161           ENDIF 
    1162           IF( med_diag%FEDISS3%dgsave   ) THEN 
    1163              CALL wrk_alloc( jpi, jpj, jpk, fediss3   ) 
    1164              fediss3(:,:,: )  = 0.0 !!  
    1165           ENDIF 
    1166           IF( med_diag%FESCAV3%dgsave   ) THEN 
    1167              CALL wrk_alloc( jpi, jpj, jpk, fescav3   ) 
    1168              fescav3(:,:,: )  = 0.0 !!  
    1169           ENDIF 
    1170           IF( med_diag%MIGRAZP3%dgsave   ) THEN 
    1171              CALL wrk_alloc( jpi, jpj, jpk, migrazp3  ) 
    1172              migrazp3(:,:,: )  = 0.0 !!  
    1173           ENDIF 
    1174           IF( med_diag%MIGRAZD3%dgsave   ) THEN 
    1175              CALL wrk_alloc( jpi, jpj, jpk, migrazd3  ) 
    1176              migrazd3(:,:,: )  = 0.0 !!  
    1177           ENDIF 
    1178           IF( med_diag%MEGRAZP3%dgsave   ) THEN 
    1179              CALL wrk_alloc( jpi, jpj, jpk, megrazp3  ) 
    1180              megrazp3(:,:,: )  = 0.0 !!  
    1181           ENDIF 
    1182           IF( med_diag%MEGRAZD3%dgsave   ) THEN 
    1183              CALL wrk_alloc( jpi, jpj, jpk, megrazd3  ) 
    1184              megrazd3(:,:,: )  = 0.0 !!  
    1185           ENDIF 
    1186           IF( med_diag%MEGRAZZ3%dgsave   ) THEN 
    1187              CALL wrk_alloc( jpi, jpj, jpk, megrazz3  ) 
    1188              megrazz3(:,:,: )  = 0.0 !!  
    1189           ENDIF 
    1190           IF( med_diag%O2SAT3%dgsave     ) THEN 
    1191              CALL wrk_alloc( jpi, jpj, jpk, o2sat3    ) 
    1192              o2sat3(:,:,: )    = 0.0 !!  
    1193           ENDIF 
    1194           IF( med_diag%PBSI3%dgsave      ) THEN 
    1195              CALL wrk_alloc( jpi, jpj, jpk, pbsi3     ) 
    1196              pbsi3(:,:,: )     = 0.0 !!  
    1197           ENDIF 
    1198           IF( med_diag%PCAL3%dgsave      ) THEN 
    1199              CALL wrk_alloc( jpi, jpj, jpk, pcal3     ) 
    1200              pcal3(:,:,: )     = 0.0 !!  
    1201           ENDIF 
    1202           IF( med_diag%REMOC3%dgsave     ) THEN 
    1203              CALL wrk_alloc( jpi, jpj, jpk, remoc3    ) 
    1204              remoc3(:,:,: )    = 0.0 !!  
    1205           ENDIF 
    1206           IF( med_diag%PNLIMJ3%dgsave    ) THEN 
    1207              CALL wrk_alloc( jpi, jpj, jpk, pnlimj3   ) 
    1208              pnlimj3(:,:,: )   = 0.0 !!  
    1209           ENDIF 
    1210           IF( med_diag%PNLIMN3%dgsave    ) THEN 
    1211              CALL wrk_alloc( jpi, jpj, jpk, pnlimn3   ) 
    1212              pnlimn3(:,:,: )   = 0.0 !!  
    1213           ENDIF 
    1214           IF( med_diag%PNLIMFE3%dgsave   ) THEN 
    1215              CALL wrk_alloc( jpi, jpj, jpk, pnlimfe3  ) 
    1216              pnlimfe3(:,:,: )  = 0.0 !!  
    1217           ENDIF 
    1218           IF( med_diag%PDLIMJ3%dgsave    ) THEN 
    1219              CALL wrk_alloc( jpi, jpj, jpk, pdlimj3   ) 
    1220              pdlimj3(:,:,: )   = 0.0 !!  
    1221           ENDIF 
    1222           IF( med_diag%PDLIMN3%dgsave    ) THEN 
    1223              CALL wrk_alloc( jpi, jpj, jpk, pdlimn3   ) 
    1224              pdlimn3(:,:,: )   = 0.0 !!  
    1225           ENDIF 
    1226           IF( med_diag%PDLIMFE3%dgsave   ) THEN 
    1227              CALL wrk_alloc( jpi, jpj, jpk, pdlimfe3  ) 
    1228              pdlimfe3(:,:,: )  = 0.0 !!  
    1229           ENDIF 
    1230           IF( med_diag%PDLIMSI3%dgsave   ) THEN 
    1231              CALL wrk_alloc( jpi, jpj, jpk, pdlimsi3  ) 
    1232              pdlimsi3(:,:,: )  = 0.0 !!  
    1233           ENDIF 
    1234  
    1235        ENDIF 
    1236        !! lk_iomput                                    
    1237        !! 
     1026       IF( med_diag%TPP3%dgsave ) THEN 
     1027          CALL wrk_alloc( jpi, jpj, jpk,       tpp3d ) 
     1028          tpp3d(:,:,:)      = 0.0 !!  
     1029       ENDIF 
     1030       IF( med_diag%DETFLUX3%dgsave ) THEN 
     1031          CALL wrk_alloc( jpi, jpj, jpk,        detflux3d ) 
     1032          detflux3d(:,:,:)      = 0.0 !!  
     1033       ENDIF 
     1034       IF( med_diag%REMIN3N%dgsave ) THEN 
     1035          CALL wrk_alloc( jpi, jpj, jpk,        remin3dn ) 
     1036          remin3dn(:,:,:)      = 0.0 !!  
     1037       ENDIF 
     1038       !!  
     1039       !! AXY (10/11/16): CMIP6 diagnostics, 2D 
     1040       !! JPALM -- 17-11-16 -- put fgco2 alloc out of diag request 
     1041       !!                   needed for coupling/passed through restart 
     1042       !! IF( med_diag%FGCO2%dgsave ) THEN 
     1043       CALL wrk_alloc( jpi, jpj,   fgco2    ) 
     1044       fgco2(:,:)      = 0.0  !! 
     1045       !! ENDIF 
     1046       IF( med_diag%INTDISSIC%dgsave ) THEN 
     1047          CALL wrk_alloc( jpi, jpj,   intdissic    ) 
     1048          intdissic(:,:)  = 0.0 !! 
     1049       ENDIF 
     1050       IF( med_diag%INTDISSIN%dgsave ) THEN 
     1051          CALL wrk_alloc( jpi, jpj,   intdissin    ) 
     1052          intdissin(:,:)  = 0.0 !! 
     1053       ENDIF 
     1054       IF( med_diag%INTDISSISI%dgsave ) THEN 
     1055          CALL wrk_alloc( jpi, jpj,   intdissisi    ) 
     1056          intdissisi(:,:)  = 0.0 !! 
     1057       ENDIF 
     1058       IF( med_diag%INTTALK%dgsave ) THEN 
     1059          CALL wrk_alloc( jpi, jpj,   inttalk    ) 
     1060          inttalk(:,:)  = 0.0 !! 
     1061       ENDIF 
     1062       IF( med_diag%O2min%dgsave ) THEN 
     1063          CALL wrk_alloc( jpi, jpj,   o2min    ) 
     1064          o2min(:,:)  = 1.e3  !! set to high value as we're looking for min(o2) 
     1065       ENDIF 
     1066       IF( med_diag%ZO2min%dgsave ) THEN 
     1067          CALL wrk_alloc( jpi, jpj,   zo2min    ) 
     1068          zo2min(:,:)  = 0.0  !! 
     1069       ENDIF 
     1070       IF( med_diag%FBDDTALK%dgsave  ) THEN 
     1071          CALL wrk_alloc( jpi, jpj, fbddtalk  ) 
     1072          fbddtalk(:,:)  = 0.0 !!  
     1073       ENDIF 
     1074       IF( med_diag%FBDDTDIC%dgsave  ) THEN 
     1075          CALL wrk_alloc( jpi, jpj, fbddtdic  ) 
     1076          fbddtdic(:,:)  = 0.0 !!  
     1077       ENDIF 
     1078       IF( med_diag%FBDDTDIFE%dgsave ) THEN 
     1079          CALL wrk_alloc( jpi, jpj, fbddtdife ) 
     1080          fbddtdife(:,:) = 0.0 !!  
     1081       ENDIF 
     1082       IF( med_diag%FBDDTDIN%dgsave  ) THEN 
     1083          CALL wrk_alloc( jpi, jpj, fbddtdin  ) 
     1084          fbddtdin(:,:)  = 0.0 !!  
     1085       ENDIF 
     1086       IF( med_diag%FBDDTDISI%dgsave ) THEN 
     1087          CALL wrk_alloc( jpi, jpj, fbddtdisi ) 
     1088          fbddtdisi(:,:) = 0.0 !!  
     1089       ENDIF 
     1090       !!  
     1091       !! AXY (10/11/16): CMIP6 diagnostics, 3D 
     1092       IF( med_diag%TPPD3%dgsave     ) THEN 
     1093          CALL wrk_alloc( jpi, jpj, jpk, tppd3     ) 
     1094          tppd3(:,:,:)     = 0.0 !!  
     1095       ENDIF 
     1096       IF( med_diag%BDDTALK3%dgsave  ) THEN 
     1097          CALL wrk_alloc( jpi, jpj, jpk, bddtalk3  ) 
     1098          bddtalk3(:,:,:)  = 0.0 !!  
     1099       ENDIF 
     1100       IF( med_diag%BDDTDIC3%dgsave  ) THEN 
     1101          CALL wrk_alloc( jpi, jpj, jpk, bddtdic3  ) 
     1102          bddtdic3(:,:,:)  = 0.0 !!  
     1103       ENDIF 
     1104       IF( med_diag%BDDTDIFE3%dgsave ) THEN 
     1105          CALL wrk_alloc( jpi, jpj, jpk, bddtdife3 ) 
     1106          bddtdife3(:,:,:) = 0.0 !!  
     1107       ENDIF 
     1108       IF( med_diag%BDDTDIN3%dgsave  ) THEN 
     1109          CALL wrk_alloc( jpi, jpj, jpk, bddtdin3  ) 
     1110          bddtdin3(:,:,:)  = 0.0 !!  
     1111       ENDIF 
     1112       IF( med_diag%BDDTDISI3%dgsave ) THEN 
     1113          CALL wrk_alloc( jpi, jpj, jpk, bddtdisi3 ) 
     1114          bddtdisi3(:,:,:) = 0.0 !!  
     1115       ENDIF 
     1116       IF( med_diag%FD_NIT3%dgsave   ) THEN 
     1117          CALL wrk_alloc( jpi, jpj, jpk, fd_nit3   ) 
     1118          fd_nit3(:,:,:)   = 0.0 !!  
     1119       ENDIF 
     1120       IF( med_diag%FD_SIL3%dgsave   ) THEN 
     1121          CALL wrk_alloc( jpi, jpj, jpk, fd_sil3   ) 
     1122          fd_sil3(:,:,:)   = 0.0 !!  
     1123       ENDIF 
     1124       IF( med_diag%FD_CAR3%dgsave   ) THEN 
     1125          CALL wrk_alloc( jpi, jpj, jpk, fd_car3   ) 
     1126          fd_car3(:,:,:)   = 0.0 !!  
     1127       ENDIF 
     1128       IF( med_diag%FD_CAL3%dgsave   ) THEN 
     1129          CALL wrk_alloc( jpi, jpj, jpk, fd_cal3   ) 
     1130          fd_cal3(:,:,:)   = 0.0 !!  
     1131       ENDIF 
     1132       IF( med_diag%DCALC3%dgsave    ) THEN 
     1133          CALL wrk_alloc( jpi, jpj, jpk, dcalc3    ) 
     1134          dcalc3(:,:,: )   = 0.0 !!  
     1135       ENDIF 
     1136       IF( med_diag%EXPC3%dgsave     ) THEN 
     1137          CALL wrk_alloc( jpi, jpj, jpk, expc3   ) 
     1138          expc3(:,:,: )    = 0.0 !!  
     1139       ENDIF 
     1140       IF( med_diag%EXPN3%dgsave     ) THEN 
     1141          CALL wrk_alloc( jpi, jpj, jpk, expn3   ) 
     1142          expn3(:,:,: )    = 0.0 !!  
     1143       ENDIF 
     1144       IF( med_diag%FEDISS3%dgsave   ) THEN 
     1145          CALL wrk_alloc( jpi, jpj, jpk, fediss3   ) 
     1146          fediss3(:,:,: )  = 0.0 !!  
     1147       ENDIF 
     1148       IF( med_diag%FESCAV3%dgsave   ) THEN 
     1149          CALL wrk_alloc( jpi, jpj, jpk, fescav3   ) 
     1150          fescav3(:,:,: )  = 0.0 !!  
     1151       ENDIF 
     1152       IF( med_diag%MIGRAZP3%dgsave   ) THEN 
     1153          CALL wrk_alloc( jpi, jpj, jpk, migrazp3  ) 
     1154          migrazp3(:,:,: )  = 0.0 !!  
     1155       ENDIF 
     1156       IF( med_diag%MIGRAZD3%dgsave   ) THEN 
     1157          CALL wrk_alloc( jpi, jpj, jpk, migrazd3  ) 
     1158          migrazd3(:,:,: )  = 0.0 !!  
     1159       ENDIF 
     1160       IF( med_diag%MEGRAZP3%dgsave   ) THEN 
     1161          CALL wrk_alloc( jpi, jpj, jpk, megrazp3  ) 
     1162          megrazp3(:,:,: )  = 0.0 !!  
     1163       ENDIF 
     1164       IF( med_diag%MEGRAZD3%dgsave   ) THEN 
     1165          CALL wrk_alloc( jpi, jpj, jpk, megrazd3  ) 
     1166          megrazd3(:,:,: )  = 0.0 !!  
     1167       ENDIF 
     1168       IF( med_diag%MEGRAZZ3%dgsave   ) THEN 
     1169          CALL wrk_alloc( jpi, jpj, jpk, megrazz3  ) 
     1170          megrazz3(:,:,: )  = 0.0 !!  
     1171       ENDIF 
     1172       IF( med_diag%O2SAT3%dgsave     ) THEN 
     1173          CALL wrk_alloc( jpi, jpj, jpk, o2sat3    ) 
     1174          o2sat3(:,:,: )    = 0.0 !!  
     1175       ENDIF 
     1176       IF( med_diag%PBSI3%dgsave      ) THEN 
     1177          CALL wrk_alloc( jpi, jpj, jpk, pbsi3     ) 
     1178          pbsi3(:,:,: )     = 0.0 !!  
     1179       ENDIF 
     1180       IF( med_diag%PCAL3%dgsave      ) THEN 
     1181          CALL wrk_alloc( jpi, jpj, jpk, pcal3     ) 
     1182          pcal3(:,:,: )     = 0.0 !!  
     1183       ENDIF 
     1184       IF( med_diag%REMOC3%dgsave     ) THEN 
     1185          CALL wrk_alloc( jpi, jpj, jpk, remoc3    ) 
     1186          remoc3(:,:,: )    = 0.0 !!  
     1187       ENDIF 
     1188       IF( med_diag%PNLIMJ3%dgsave    ) THEN 
     1189          CALL wrk_alloc( jpi, jpj, jpk, pnlimj3   ) 
     1190          pnlimj3(:,:,: )   = 0.0 !!  
     1191       ENDIF 
     1192       IF( med_diag%PNLIMN3%dgsave    ) THEN 
     1193          CALL wrk_alloc( jpi, jpj, jpk, pnlimn3   ) 
     1194          pnlimn3(:,:,: )   = 0.0 !!  
     1195       ENDIF 
     1196       IF( med_diag%PNLIMFE3%dgsave   ) THEN 
     1197          CALL wrk_alloc( jpi, jpj, jpk, pnlimfe3  ) 
     1198          pnlimfe3(:,:,: )  = 0.0 !!  
     1199       ENDIF 
     1200       IF( med_diag%PDLIMJ3%dgsave    ) THEN 
     1201          CALL wrk_alloc( jpi, jpj, jpk, pdlimj3   ) 
     1202          pdlimj3(:,:,: )   = 0.0 !!  
     1203       ENDIF 
     1204       IF( med_diag%PDLIMN3%dgsave    ) THEN 
     1205          CALL wrk_alloc( jpi, jpj, jpk, pdlimn3   ) 
     1206          pdlimn3(:,:,: )   = 0.0 !!  
     1207       ENDIF 
     1208       IF( med_diag%PDLIMFE3%dgsave   ) THEN 
     1209          CALL wrk_alloc( jpi, jpj, jpk, pdlimfe3  ) 
     1210          pdlimfe3(:,:,: )  = 0.0 !!  
     1211       ENDIF 
     1212       IF( med_diag%PDLIMSI3%dgsave   ) THEN 
     1213          CALL wrk_alloc( jpi, jpj, jpk, pdlimsi3  ) 
     1214          pdlimsi3(:,:,: )  = 0.0 !!  
     1215       ENDIF 
     1216    ENDIF                     !! lk_iomput                                    
     1217    !! 
    12381218# if defined key_axy_nancheck 
    1239        DO jn = 1,jptra 
    1240           !! fq0 = MINVAL(trn(:,:,:,jn)) 
    1241           !! fq1 = MAXVAL(trn(:,:,:,jn)) 
    1242           fq2 = SUM(trn(:,:,:,jn)) 
    1243           !! if (lwp) write (numout,'(a,2i6,3(1x,1pe15.5))') 'NAN-CHECK', & 
    1244           !! &        kt, jn, fq0, fq1, fq2 
    1245           !! AXY (30/01/14): much to our surprise, the next line doesn't work on HECTOR 
    1246           !!                 and has been replaced here with a specialist routine 
    1247           !! if (fq2 /= fq2 ) then 
    1248           if ( ieee_is_nan( fq2 ) ) then 
    1249              !! there's a NaN here 
    1250              if (lwp) write(numout,*) 'NAN detected in field', jn, 'at time', kt, 'at position:' 
    1251              DO jk = 1,jpk 
    1252                 DO jj = 1,jpj 
    1253                    DO ji = 1,jpi 
    1254                       !! AXY (30/01/14): "isnan" problem on HECTOR 
    1255                       !! if (trn(ji,jj,jk,jn) /= trn(ji,jj,jk,jn)) then 
    1256                       if ( ieee_is_nan( trn(ji,jj,jk,jn) ) ) then 
    1257                          if (lwp) write (numout,'(a,1pe12.2,4i6)') 'NAN-CHECK', & 
    1258                          &        tmask(ji,jj,jk), ji, jj, jk, jn 
    1259                       endif 
    1260                    enddo 
     1219    DO jn = 1,jptra 
     1220       fq2 = SUM(trn(:,:,:,jn)) 
     1221       if ( ieee_is_nan( fq2 ) ) then 
     1222          !! there's a NaN here 
     1223          if (lwp) write(numout,*) 'NAN detected in field', jn, 'at time', kt, 'at position:' 
     1224          DO jk = 1,jpk 
     1225             DO jj = 1,jpj 
     1226                DO ji = 1,jpi 
     1227                   if ( ieee_is_nan( trn(ji,jj,jk,jn) ) ) then 
     1228                      if (lwp) write (numout,'(a,1pe12.2,4i6)') 'NAN-CHECK', & 
     1229                           &        tmask(ji,jj,jk), ji, jj, jk, jn 
     1230                   endif 
    12611231                enddo 
    12621232             enddo 
    1263              CALL ctl_stop( 'trcbio_medusa, NAN in incoming tracer field' ) 
    1264           endif 
     1233          enddo 
     1234          CALL ctl_stop( 'trcbio_medusa, NAN in incoming tracer field' ) 
     1235       endif 
     1236    ENDDO 
     1237    CALL flush(numout) 
     1238# endif 
     1239 
     1240# if defined key_debug_medusa 
     1241    IF ( lwp ) write (numout,*) 'trc_bio_medusa: variables initialised and checked' 
     1242    CALL flush(numout) 
     1243# endif  
     1244 
     1245# if defined key_roam 
     1246    !!---------------------------------------------------------------------- 
     1247    !! calculate atmospheric pCO2 
     1248    !!---------------------------------------------------------------------- 
     1249    !! 
     1250#  if defined key_axy_pi_co2 
     1251    f_xco2a = 284.725         !! OCMIP pre-industrial pCO2 
     1252#  else 
     1253    f_xco2a = 284.725         !! OCMIP pre-industrial pCO2 
     1254#  endif 
     1255    IF(lwp) WRITE(numout,*) ' MEDUSA atm pCO2  =', f_xco2a 
     1256# endif 
     1257 
     1258# if defined key_debug_medusa 
     1259    IF ( lwp ) write (numout,*) 'trc_bio_medusa: ready for carbonate chemistry' 
     1260    IF ( lwp ) write (numout,*) 'trc_bio_medusa: kt = ', kt 
     1261    IF ( lwp ) write (numout,*) 'trc_bio_medusa: nittrc000 = ', nittrc000 
     1262    CALL flush(numout) 
     1263# endif  
     1264 
     1265    !!====================================================================== 
     1266    !! AXY (07/04/17): possible subroutine block; ocean interior carbonate chemistry 
     1267    !!====================================================================== 
     1268# if defined key_roam 
     1269    !! AXY (20/11/14): alter to call on first MEDUSA timestep and then every 
     1270    !!                 month (this is hardwired as 960 timesteps but should 
     1271    !!                 be calculated and done properly 
     1272    !! IF( kt == nit000 .or. mod(kt,1920) == 0 ) THEN 
     1273    !! IF( kt == nittrc000 .or. mod(kt,960) == 0 ) THEN  
     1274    !!============================= 
     1275    !! Jpalm -- 07-10-2016 -- need to change carb-chem frequency call : 
     1276    !!          we don't want to call on the first time-step of all run submission,  
     1277    !!          but only on the very first time-step, and then every month 
     1278    !!          So we call on nittrc000 if not restarted run,  
     1279    !!          else if one month after last call. 
     1280    !!          assume one month is 30d --> 3600*24*30 : 2592000s 
     1281    !!          try to call carb-chem at 1st month's tm-stp : x * 30d + 1*rdt(i.e: mod = rdt)    
     1282    !!          ++ need to pass carb-chem output var through restarts 
     1283    IF ( ( kt == nittrc000 .AND. .NOT.ln_rsttr ) .OR. mod(kt*rdt,2592000.) == rdt ) THEN 
     1284       !!---------------------------------------------------------------------- 
     1285       !! Calculate the carbonate chemistry for the whole ocean on the first 
     1286       !! simulation timestep and every month subsequently; the resulting 3D 
     1287       !! field of omega calcite is used to determine the depth of the CCD 
     1288       !!---------------------------------------------------------------------- 
     1289       !! 
     1290       IF(lwp) WRITE(numout,*) ' MEDUSA calculating all carbonate chemistry at kt =', kt 
     1291       CALL flush(numout) 
     1292       !! blank flags 
     1293       i2_omcal(:,:) = 0 
     1294       i2_omarg(:,:) = 0 
     1295       !! loop over 3D space 
     1296       DO jk = 1,jpk 
     1297          DO jj = 2,jpjm1 
     1298             DO ji = 2,jpim1 
     1299                !! OPEN wet point IF..THEN loop 
     1300                if (tmask(ji,jj,jk).eq.1) then 
     1301                   IF ( lk_oasis ) THEN 
     1302                      f_xco2a = PCO2a_in_cpl(ji,jj)   !! use 2D atm xCO2 from atm coupling 
     1303                   ENDIF 
     1304                   !! AXY (06/04/17): where am I? 
     1305                   flatx = gphit(ji,jj) 
     1306                   !! do carbonate chemistry 
     1307                   !! 
     1308                   fdep2 = fsdept(ji,jj,jk)           !! set up level midpoint 
     1309                   !! AXY (28/11/16): seafloor depth; previously mbathy(ji,jj) - 1, now mbathy(ji,jj) 
     1310                   jmbathy = mbathy(ji,jj) 
     1311                   !! 
     1312                   !! set up required state variables 
     1313                   zdic = max(0.,trn(ji,jj,jk,jpdic))        !! dissolved inorganic carbon 
     1314                   zalk = max(0.,trn(ji,jj,jk,jpalk))        !! alkalinity 
     1315                   ztmp = tsn(ji,jj,jk,jp_tem)               !! temperature 
     1316                   zsal = tsn(ji,jj,jk,jp_sal)               !! salinity 
     1317                   zsil = max(0.,trn(ji,jj,jk,jpsil))        !! silicic acid 
     1318                   zpho = max(0.,trn(ji,jj,jk,jpdin)) / 16.0 !! phosphate via DIN and Redfield 
     1319                   !! 
     1320                   !! AXY (28/02/14): check input fields 
     1321                   if (ztmp .lt. -3.0 .or. ztmp .gt. 40.0 ) then 
     1322                      IF(lwp) WRITE(numout,*) ' trc_bio_medusa: T WARNING 3D, ', & 
     1323                           tsb(ji,jj,jk,jp_tem), tsn(ji,jj,jk,jp_tem), ' at (',    & 
     1324                           ji, ',', jj, ',', jk, ') at time', kt 
     1325                      IF(lwp) WRITE(numout,*) ' trc_bio_medusa: T SWITCHING 3D, ', & 
     1326                           tsn(ji,jj,jk,jp_tem), ' -> ', tsb(ji,jj,jk,jp_tem) 
     1327                      ztmp = tsb(ji,jj,jk,jp_tem)     !! temperature 
     1328                   endif 
     1329                   if (zsal .lt. 0.0 .or. zsal .gt. 45.0 ) then 
     1330                      IF(lwp) WRITE(numout,*) ' trc_bio_medusa: S WARNING 3D, ', & 
     1331                           tsb(ji,jj,jk,jp_sal), tsn(ji,jj,jk,jp_sal), ' at (',    & 
     1332                           ji, ',', jj, ',', jk, ') at time', kt 
     1333                   endif 
     1334                   !! 
     1335                   !! blank input variables not used at this stage (they relate to air-sea flux) 
     1336                   f_kw660 = 1.0 
     1337                   f_pp0   = 1.0 
     1338                   !! 
     1339                   !! calculate carbonate chemistry at grid cell midpoint 
     1340                   !! AXY (22/06/15): use Orr & Epitalon (2015) MOCSY-2 carbonate 
     1341                   !!                 chemistry package 
     1342                   CALL mocsy_interface( ztmp, zsal, zalk, zdic, zsil, zpho,         &    ! inputs 
     1343                        f_pp0, fdep2, flatx, f_kw660, f_xco2a, 1,                         &    ! inputs 
     1344                        f_ph, f_pco2w, f_fco2w, f_h2co3, f_hco3, f_co3, f_omarg(ji,jj),   &    ! outputs 
     1345                        f_omcal(ji,jj), f_BetaD, f_rhosw, f_opres, f_insitut,             &    ! outputs 
     1346                        f_pco2atm, f_fco2atm, f_schmidtco2, f_kwco2, f_K0,                &    ! outputs 
     1347                        f_co2starair, f_co2flux, f_dpco2 )                                     ! outputs 
     1348                   !! 
     1349                   f_TDIC = (zdic / f_rhosw) * 1000. ! mmol / m3 -> umol / kg 
     1350                   f_TALK = (zalk / f_rhosw) * 1000. !  meq / m3 ->  ueq / kg 
     1351                   f_dcf  = f_rhosw 
     1352                   !! 
     1353                   !! store 3D outputs 
     1354                   f3_pH(ji,jj,jk)    = f_ph 
     1355                   f3_h2co3(ji,jj,jk) = f_h2co3 
     1356                   f3_hco3(ji,jj,jk)  = f_hco3 
     1357                   f3_co3(ji,jj,jk)   = f_co3 
     1358                   f3_omcal(ji,jj,jk) = f_omcal(ji,jj) 
     1359                   f3_omarg(ji,jj,jk) = f_omarg(ji,jj) 
     1360                   !! 
     1361                   !! CCD calculation: calcite 
     1362                   if (i2_omcal(ji,jj) .eq. 0 .and. f_omcal(ji,jj) .lt. 1.0) then 
     1363                      if (jk .eq. 1) then 
     1364                         f2_ccd_cal(ji,jj) = fdep2 
     1365                      else 
     1366                         fq0 = f3_omcal(ji,jj,jk-1) - f_omcal(ji,jj) 
     1367                         fq1 = f3_omcal(ji,jj,jk-1) - 1.0 
     1368                         fq2 = fq1 / (fq0 + tiny(fq0)) 
     1369                         fq3 = fdep2 - fsdept(ji,jj,jk-1) 
     1370                         fq4 = fq2 * fq3 
     1371                         f2_ccd_cal(ji,jj) = fsdept(ji,jj,jk-1) + fq4 
     1372                      endif 
     1373                      i2_omcal(ji,jj)   = 1 
     1374                   endif 
     1375                   if ( i2_omcal(ji,jj) .eq. 0 .and. jk .eq. jmbathy ) then 
     1376                      !! reached seafloor and still no dissolution; set to seafloor (W-point) 
     1377                      f2_ccd_cal(ji,jj) = fsdepw(ji,jj,jk+1) 
     1378                      i2_omcal(ji,jj)   = 1 
     1379                   endif 
     1380                   !! 
     1381                   !! CCD calculation: aragonite 
     1382                   if (i2_omarg(ji,jj) .eq. 0 .and. f_omarg(ji,jj) .lt. 1.0) then 
     1383                      if (jk .eq. 1) then 
     1384                         f2_ccd_arg(ji,jj) = fdep2 
     1385                      else 
     1386                         fq0 = f3_omarg(ji,jj,jk-1) - f_omarg(ji,jj) 
     1387                         fq1 = f3_omarg(ji,jj,jk-1) - 1.0 
     1388                         fq2 = fq1 / (fq0 + tiny(fq0)) 
     1389                         fq3 = fdep2 - fsdept(ji,jj,jk-1) 
     1390                         fq4 = fq2 * fq3 
     1391                         f2_ccd_arg(ji,jj) = fsdept(ji,jj,jk-1) + fq4 
     1392                      endif 
     1393                      i2_omarg(ji,jj)   = 1 
     1394                   endif 
     1395                   if ( i2_omarg(ji,jj) .eq. 0 .and. jk .eq. jmbathy ) then 
     1396                      !! reached seafloor and still no dissolution; set to seafloor (W-point) 
     1397                      f2_ccd_arg(ji,jj) = fsdepw(ji,jj,jk+1) 
     1398                      i2_omarg(ji,jj)   = 1 
     1399                   endif 
     1400                endif 
     1401             ENDDO 
     1402          ENDDO 
    12651403       ENDDO 
    1266        CALL flush(numout) 
     1404    ENDIF 
    12671405# endif 
    12681406 
    12691407# if defined key_debug_medusa 
    1270       IF (lwp) write (numout,*) 'trc_bio_medusa: variables initialised and checked' 
    1271       CALL flush(numout) 
     1408    IF ( lwp ) write (numout,*) 'trc_bio_medusa: ready for full domain calculations' 
     1409    CALL flush(numout) 
    12721410# endif  
    12731411 
     1412    !!---------------------------------------------------------------------- 
     1413    !! MEDUSA has unified equation through the water column 
     1414    !! (Diff. from LOBSTER which has two sets: bio- and non-bio layers)  
     1415    !! Statement below in LOBSTER is different: DO jk = 1, jpkbm1           
     1416    !!---------------------------------------------------------------------- 
     1417    !! 
     1418    !! NOTE: the ordering of the loops below differs from that of some other 
     1419    !! models; looping over the vertical dimension is the outermost loop and 
     1420    !! this complicates some calculations (e.g. storage of vertical fluxes 
     1421    !! that can otherwise be done via a singular variable require 2D fields 
     1422    !! here); however, these issues are relatively easily resolved, but the 
     1423    !! loops CANNOT be reordered without potentially causing code efficiency 
     1424    !! problems (e.g. array indexing means that reordering the loops would 
     1425    !! require skipping between widely-spaced memory location; potentially 
     1426    !! outside those immediately cached) 
     1427    !! 
     1428    !! OPEN vertical loop 
     1429    DO jk = 1,jpk 
     1430       !! OPEN horizontal loops 
     1431       DO jj = 2,jpjm1 
     1432          DO ji = 2,jpim1 
     1433             !! OPEN wet point IF..THEN loop 
     1434             if (tmask(ji,jj,jk).eq.1) then                
     1435                !!====================================================================== 
     1436                !! SETUP LOCAL GRID CELL 
     1437                !!====================================================================== 
     1438                !! 
     1439                !!--------------------------------------------------------------------- 
     1440                !! Some notes on grid vertical structure 
     1441                !! - fsdepw(ji,jj,jk) is the depth of the upper surface of level jk 
     1442                !! - fsde3w(ji,jj,jk) is *approximately* the midpoint of level jk 
     1443                !! - fse3t(ji,jj,jk)  is the thickness of level jk 
     1444                !!--------------------------------------------------------------------- 
     1445                !! 
     1446                !! AXY (11/12/08): set up level thickness 
     1447                fthk  = fse3t(ji,jj,jk) 
     1448                !! AXY (25/02/10): set up level depth (top of level) 
     1449                fdep  = fsdepw(ji,jj,jk) 
     1450                !! AXY (01/03/10): set up level depth (bottom of level) 
     1451                fdep1 = fdep + fthk 
     1452                !! AXY (17/05/13): where am I? 
     1453                flatx = gphit(ji,jj) 
     1454                flonx = glamt(ji,jj) 
     1455                !! AXY (28/11/16): local seafloor depth 
     1456                !!                 previously mbathy(ji,jj) - 1, now mbathy(ji,jj) 
     1457                jmbathy = mbathy(ji,jj) 
     1458                !! 
     1459                !! set up model tracers 
     1460                !! negative values of state variables are not allowed to 
     1461                !! contribute to the calculated fluxes 
     1462                zchn = max(0.,trn(ji,jj,jk,jpchn)) !! non-diatom chlorophyll 
     1463                zchd = max(0.,trn(ji,jj,jk,jpchd)) !! diatom chlorophyll 
     1464                zphn = max(0.,trn(ji,jj,jk,jpphn)) !! non-diatoms 
     1465                zphd = max(0.,trn(ji,jj,jk,jpphd)) !! diatoms 
     1466                zpds = max(0.,trn(ji,jj,jk,jppds)) !! diatom silicon 
     1467                !! AXY (28/01/10): probably need to take account of chl/biomass connection 
     1468                if (zchn.eq.0.) zphn = 0. 
     1469                if (zchd.eq.0.) zphd = 0. 
     1470                if (zphn.eq.0.) zchn = 0. 
     1471                if (zphd.eq.0.) zchd = 0. 
     1472                !! AXY (23/01/14): duh - why did I forget diatom silicon? 
     1473                if (zpds.eq.0.) zphd = 0. 
     1474                if (zphd.eq.0.) zpds = 0. 
     1475                zzmi = max(0.,trn(ji,jj,jk,jpzmi)) !! microzooplankton 
     1476                zzme = max(0.,trn(ji,jj,jk,jpzme)) !! mesozooplankton 
     1477                zdet = max(0.,trn(ji,jj,jk,jpdet)) !! detrital nitrogen 
     1478                zdin = max(0.,trn(ji,jj,jk,jpdin)) !! dissolved inorganic nitrogen 
     1479                zsil = max(0.,trn(ji,jj,jk,jpsil)) !! dissolved silicic acid 
     1480                zfer = max(0.,trn(ji,jj,jk,jpfer)) !! dissolved "iron" 
    12741481# if defined key_roam 
    1275       !!---------------------------------------------------------------------- 
    1276       !! calculate atmospheric pCO2 
    1277       !!---------------------------------------------------------------------- 
    1278       !! 
    1279       !! what's atmospheric pCO2 doing? (data start in 1859) 
    1280       iyr1  = nyear - 1859 + 1 
    1281       iyr2  = iyr1 + 1 
    1282       if (iyr1 .le. 1) then 
    1283          !! before 1860 
    1284          f_xco2a = hist_pco2(1) 
    1285       elseif (iyr2 .ge. 242) then 
    1286          !! after 2099 
    1287          f_xco2a = hist_pco2(242) 
    1288       else 
    1289          !! just right 
    1290          fq0 = hist_pco2(iyr1) 
    1291          fq1 = hist_pco2(iyr2) 
    1292          fq2 = real(nsec_day) / (60.0 * 60.0 * 24.0) 
    1293          !! AXY (14/06/12): tweaked to make more sense (and be correct) 
    1294 #  if defined key_bs_axy_yrlen 
    1295          fq3 = (real(nday_year) - 1.0 + fq2) / 360.0  !! bugfix: for 360d year with HadGEM2-ES forcing 
    1296 #  else 
    1297          fq3 = (real(nday_year) - 1.0 + fq2) / 365.0  !! original use of 365 days (not accounting for leap year or 360d year) 
     1482                zdtc = max(0.,trn(ji,jj,jk,jpdtc)) !! detrital carbon 
     1483                zdic = max(0.,trn(ji,jj,jk,jpdic)) !! dissolved inorganic carbon 
     1484                zalk = max(0.,trn(ji,jj,jk,jpalk)) !! alkalinity 
     1485                zoxy = max(0.,trn(ji,jj,jk,jpoxy)) !! oxygen 
     1486#  if defined key_axy_carbchem 
     1487                zpho = max(0.,trn(ji,jj,jk,jpdin)) / 16.0 !! phosphate via DIN and Redfield 
    12981488#  endif 
    1299          fq4 = (fq0 * (1.0 - fq3)) + (fq1 * fq3) 
    1300          f_xco2a = fq4 
    1301       endif 
    1302 #  if defined key_axy_pi_co2 
    1303       f_xco2a = 284.725          !! OCMIP pre-industrial pCO2 
    1304 #  endif 
    1305       !! IF(lwp) WRITE(numout,*) ' MEDUSA nyear     =', nyear 
    1306       !! IF(lwp) WRITE(numout,*) ' MEDUSA nsec_day  =', real(nsec_day) 
    1307       !! IF(lwp) WRITE(numout,*) ' MEDUSA nday_year =', real(nday_year) 
    1308       !! AXY (29/01/14): remove surplus diagnostics 
    1309       !! IF(lwp) WRITE(numout,*) ' MEDUSA fq0       =', fq0 
    1310       !! IF(lwp) WRITE(numout,*) ' MEDUSA fq1       =', fq1 
    1311       !! IF(lwp) WRITE(numout,*) ' MEDUSA fq2       =', fq2 
    1312       !! IF(lwp) WRITE(numout,*) ' MEDUSA fq3       =', fq3 
    1313       IF(lwp) WRITE(numout,*) ' MEDUSA atm pCO2  =', f_xco2a 
    1314 # endif 
    1315  
    1316 # if defined key_debug_medusa 
    1317       IF (lwp) write (numout,*) 'trc_bio_medusa: ready for carbonate chemistry' 
    1318       IF (lwp) write (numout,*) 'trc_bio_medusa: kt = ', kt 
    1319       IF (lwp) write (numout,*) 'trc_bio_medusa: nittrc000 = ', nittrc000 
    1320       CALL flush(numout) 
    1321 # endif  
    1322  
    1323 # if defined key_roam 
    1324       !! AXY (20/11/14): alter to call on first MEDUSA timestep and then every 
    1325       !!                 month (this is hardwired as 960 timesteps but should 
    1326       !!                 be calculated and done properly 
    1327       !! IF( kt == nit000 .or. mod(kt,1920) == 0 ) THEN 
    1328       !! IF( kt == nittrc000 .or. mod(kt,960) == 0 ) THEN  
    1329       !!============================= 
    1330       !! Jpalm -- 07-10-2016 -- need to change carb-chem frequency call : 
    1331       !!          we don't want to call on the first time-step of all run submission,  
    1332       !!          but only on the very first time-step, and then every month 
    1333       !!          So we call on nittrc000 if not restarted run,  
    1334       !!          else if one month after last call. 
    1335       !!          assume one month is 30d --> 3600*24*30 : 2592000s 
    1336       !!          try to call carb-chem at 1st month's tm-stp : x * 30d + 1*rdt(i.e: mod = rdt)    
    1337       !!          ++ need to pass carb-chem output var through restarts 
    1338       If ( ( kt == nittrc000 .AND. .NOT.ln_rsttr ) .OR. mod(kt*rdt,2592000.) == rdt ) THEN 
    1339          !!---------------------------------------------------------------------- 
    1340          !! Calculate the carbonate chemistry for the whole ocean on the first 
    1341          !! simulation timestep and every month subsequently; the resulting 3D 
    1342          !! field of omega calcite is used to determine the depth of the CCD 
    1343          !!---------------------------------------------------------------------- 
    1344          !! 
    1345          IF(lwp) WRITE(numout,*) ' MEDUSA calculating all carbonate chemistry at kt =', kt 
    1346          CALL flush(numout) 
    1347          !! blank flags 
    1348          i2_omcal(:,:) = 0 
    1349          i2_omarg(:,:) = 0 
    1350          !! loop over 3D space 
    1351          DO jk = 1,jpk 
    1352             DO jj = 2,jpjm1 
    1353                DO ji = 2,jpim1 
    1354                   !! OPEN wet point IF..THEN loop 
    1355                   if (tmask(ji,jj,jk).eq.1) then 
    1356                      IF (lk_oasis) THEN 
    1357                         f_xco2a = PCO2a_in_cpl(ji,jj)        !! use 2D atm xCO2 from atm coupling 
    1358                      ENDIF 
    1359                      !! do carbonate chemistry 
    1360                      !! 
    1361                      fdep2 = fsdept(ji,jj,jk)           !! set up level midpoint 
    1362                      !! AXY (28/11/16): local seafloor depth 
    1363                      !!                 previously mbathy(ji,jj) - 1, now mbathy(ji,jj) 
    1364                      jmbathy = mbathy(ji,jj) 
    1365                      !! 
    1366                      !! set up required state variables 
    1367                      zdic = max(0.,trn(ji,jj,jk,jpdic)) !! dissolved inorganic carbon 
    1368                      zalk = max(0.,trn(ji,jj,jk,jpalk)) !! alkalinity 
    1369                      ztmp = tsn(ji,jj,jk,jp_tem)        !! temperature 
    1370                      zsal = tsn(ji,jj,jk,jp_sal)        !! salinity 
    1371 #  if defined key_mocsy 
    1372                      zsil = max(0.,trn(ji,jj,jk,jpsil))        !! silicic acid 
    1373                      zpho = max(0.,trn(ji,jj,jk,jpdin)) / 16.0 !! phosphate via DIN and Redfield 
    1374 #  endif 
    1375            !! 
    1376            !! AXY (28/02/14): check input fields 
    1377            if (ztmp .lt. -3.0 .or. ztmp .gt. 40.0 ) then 
    1378                         IF(lwp) WRITE(numout,*) ' trc_bio_medusa: T WARNING 3D, ', & 
     1489                !! 
     1490                !! also need physical parameters for gas exchange calculations 
     1491                ztmp = tsn(ji,jj,jk,jp_tem) 
     1492                zsal = tsn(ji,jj,jk,jp_sal) 
     1493                !! 
     1494                !! AXY (28/02/14): check input fields 
     1495                if (ztmp .lt. -3.0 .or. ztmp .gt. 40.0 ) then 
     1496                   IF(lwp) WRITE(numout,*) ' trc_bio_medusa: T WARNING 2D, ', & 
    13791497                        tsb(ji,jj,jk,jp_tem), tsn(ji,jj,jk,jp_tem), ' at (',    & 
    13801498                        ji, ',', jj, ',', jk, ') at time', kt 
    1381          IF(lwp) WRITE(numout,*) ' trc_bio_medusa: T SWITCHING 3D, ', & 
    1382          tsn(ji,jj,jk,jp_tem), ' -> ', tsb(ji,jj,jk,jp_tem) 
    1383                         ztmp = tsb(ji,jj,jk,jp_tem)    !! temperature 
    1384                      endif 
    1385            if (zsal .lt. 0.0 .or. zsal .gt. 45.0 ) then 
    1386                         IF(lwp) WRITE(numout,*) ' trc_bio_medusa: S WARNING 3D, ', & 
     1499                   IF(lwp) WRITE(numout,*) ' trc_bio_medusa: T SWITCHING 2D, ', & 
     1500                        tsn(ji,jj,jk,jp_tem), ' -> ', tsb(ji,jj,jk,jp_tem) 
     1501                   ztmp = tsb(ji,jj,jk,jp_tem) !! temperature 
     1502                endif 
     1503                if (zsal .lt. 0.0 .or. zsal .gt. 45.0 ) then 
     1504                   IF(lwp) WRITE(numout,*) ' trc_bio_medusa: S WARNING 2D, ', & 
    13871505                        tsb(ji,jj,jk,jp_sal), tsn(ji,jj,jk,jp_sal), ' at (',    & 
    13881506                        ji, ',', jj, ',', jk, ') at time', kt 
    1389                      endif 
    1390                      !! 
    1391                      !! blank input variables not used at this stage (they relate to air-sea flux) 
    1392                      f_kw660 = 1.0 
    1393                      f_pp0   = 1.0 
    1394                      !! 
    1395                      !! calculate carbonate chemistry at grid cell midpoint 
    1396 #  if defined key_mocsy 
    1397                      !! AXY (22/06/15): use Orr & Epitalon (2015) MOCSY-2 carbonate 
    1398                      !!                 chemistry package 
    1399                      CALL mocsy_interface( ztmp, zsal, zalk, zdic, zsil, zpho,         &    ! inputs 
    1400                      f_pp0, fdep2, gphit(ji,jj), f_kw660, f_xco2a, 1,                  &    ! inputs 
    1401                      f_ph, f_pco2w, f_fco2w, f_h2co3, f_hco3, f_co3, f_omarg(ji,jj),   &    ! outputs 
    1402                      f_omcal(ji,jj), f_BetaD, f_rhosw, f_opres, f_insitut,             &    ! outputs 
    1403                      f_pco2atm, f_fco2atm, f_schmidtco2, f_kwco2, f_K0,                &    ! outputs 
    1404                      f_co2starair, f_co2flux, f_dpco2 )                                     ! outputs 
    1405                      !! 
    1406                      f_TDIC = (zdic / f_rhosw) * 1000. ! mmol / m3 -> umol / kg 
    1407                      f_TALK = (zalk / f_rhosw) * 1000. !  meq / m3 ->  ueq / kg 
    1408                      f_dcf  = f_rhosw 
    1409 #  else 
    1410                      !! AXY (22/06/15): use old PML carbonate chemistry package (the 
    1411                      !!                 MEDUSA-2 default) 
    1412                      CALL trc_co2_medusa( ztmp, zsal, zdic, zalk, fdep2, f_kw660,      &    ! inputs 
    1413                      f_xco2a, f_ph, f_pco2w, f_h2co3, f_hco3, f_co3, f_omcal(ji,jj),   &    ! outputs 
    1414                      f_omarg(ji,jj), f_co2flux, f_TDIC, f_TALK, f_dcf, f_henry, iters)      ! outputs 
    1415                      !!  
    1416                      !! AXY (28/02/14): check output fields 
    1417                      if (iters .eq. 25) then 
    1418                         IF(lwp) WRITE(numout,*) ' trc_bio_medusa: 3D ITERS WARNING, ', & 
    1419                         iters, ' AT (', ji, ', ', jj, ', ', jk, ') AT ', kt 
    1420                      endif 
    1421 #  endif 
    1422                      !! 
    1423                      !! store 3D outputs 
    1424                      f3_pH(ji,jj,jk)    = f_ph 
    1425                      f3_h2co3(ji,jj,jk) = f_h2co3 
    1426                      f3_hco3(ji,jj,jk)  = f_hco3 
    1427                      f3_co3(ji,jj,jk)   = f_co3 
    1428                      f3_omcal(ji,jj,jk) = f_omcal(ji,jj) 
    1429                      f3_omarg(ji,jj,jk) = f_omarg(ji,jj) 
    1430                      !! 
    1431                      !! CCD calculation: calcite 
    1432                      if (i2_omcal(ji,jj) .eq. 0 .and. f_omcal(ji,jj) .lt. 1.0) then 
    1433                         if (jk .eq. 1) then 
    1434                            f2_ccd_cal(ji,jj) = fdep2 
    1435                         else 
    1436                            fq0 = f3_omcal(ji,jj,jk-1) - f_omcal(ji,jj) 
    1437                            fq1 = f3_omcal(ji,jj,jk-1) - 1.0 
    1438                            fq2 = fq1 / (fq0 + tiny(fq0)) 
    1439                            fq3 = fdep2 - fsdept(ji,jj,jk-1) 
    1440                            fq4 = fq2 * fq3 
    1441                            f2_ccd_cal(ji,jj) = fsdept(ji,jj,jk-1) + fq4 
    1442                         endif 
    1443                         i2_omcal(ji,jj)   = 1 
    1444                      endif 
    1445                      if ( i2_omcal(ji,jj) .eq. 0 .and. jk .eq. jmbathy ) then 
    1446                         !! reached seafloor and still no dissolution; set to seafloor (W-point) 
    1447                         f2_ccd_cal(ji,jj) = fsdepw(ji,jj,jk+1) 
    1448                         i2_omcal(ji,jj)   = 1 
    1449                      endif 
    1450                      !! 
    1451                      !! CCD calculation: aragonite 
    1452                      if (i2_omarg(ji,jj) .eq. 0 .and. f_omarg(ji,jj) .lt. 1.0) then 
    1453                         if (jk .eq. 1) then 
    1454                            f2_ccd_arg(ji,jj) = fdep2 
    1455                         else 
    1456                            fq0 = f3_omarg(ji,jj,jk-1) - f_omarg(ji,jj) 
    1457                            fq1 = f3_omarg(ji,jj,jk-1) - 1.0 
    1458                            fq2 = fq1 / (fq0 + tiny(fq0)) 
    1459                            fq3 = fdep2 - fsdept(ji,jj,jk-1) 
    1460                            fq4 = fq2 * fq3 
    1461                            f2_ccd_arg(ji,jj) = fsdept(ji,jj,jk-1) + fq4 
    1462                         endif 
    1463                         i2_omarg(ji,jj)   = 1 
    1464                      endif 
    1465                      if ( i2_omarg(ji,jj) .eq. 0 .and. jk .eq. jmbathy ) then 
    1466                         !! reached seafloor and still no dissolution; set to seafloor (W-point) 
    1467                         f2_ccd_arg(ji,jj) = fsdepw(ji,jj,jk+1) 
    1468                         i2_omarg(ji,jj)   = 1 
    1469                      endif 
    1470                   endif 
    1471                ENDDO 
    1472             ENDDO 
    1473          ENDDO 
    1474       ENDIF 
    1475 # endif 
    1476  
    1477 # if defined key_debug_medusa 
    1478       IF (lwp) write (numout,*) 'trc_bio_medusa: ready for full domain calculations' 
    1479       CALL flush(numout) 
    1480 # endif  
    1481  
    1482       !!---------------------------------------------------------------------- 
    1483       !! MEDUSA has unified equation through the water column 
    1484       !! (Diff. from LOBSTER which has two sets: bio- and non-bio layers)  
    1485       !! Statement below in LOBSTER is different: DO jk = 1, jpkbm1           
    1486       !!---------------------------------------------------------------------- 
    1487       !! 
    1488       !! NOTE: the ordering of the loops below differs from that of some other 
    1489       !! models; looping over the vertical dimension is the outermost loop and 
    1490       !! this complicates some calculations (e.g. storage of vertical fluxes 
    1491       !! that can otherwise be done via a singular variable require 2D fields 
    1492       !! here); however, these issues are relatively easily resolved, but the 
    1493       !! loops CANNOT be reordered without potentially causing code efficiency 
    1494       !! problems (e.g. array indexing means that reordering the loops would 
    1495       !! require skipping between widely-spaced memory location; potentially 
    1496       !! outside those immediately cached) 
    1497       !! 
    1498       !! OPEN vertical loop 
    1499       DO jk = 1,jpk 
    1500          !! OPEN horizontal loops 
    1501          DO jj = 2,jpjm1 
    1502          DO ji = 2,jpim1 
    1503             !! OPEN wet point IF..THEN loop 
    1504             if (tmask(ji,jj,jk).eq.1) then                
    1505                !!====================================================================== 
    1506                !! SETUP LOCAL GRID CELL 
    1507                !!====================================================================== 
    1508                !! 
    1509                !!--------------------------------------------------------------------- 
    1510                !! Some notes on grid vertical structure 
    1511                !! - fsdepw(ji,jj,jk) is the depth of the upper surface of level jk 
    1512                !! - fsde3w(ji,jj,jk) is *approximately* the midpoint of level jk 
    1513                !! - fse3t(ji,jj,jk)  is the thickness of level jk 
    1514                !!--------------------------------------------------------------------- 
    1515                !! 
    1516                !! AXY (11/12/08): set up level thickness 
    1517                fthk  = fse3t(ji,jj,jk) 
    1518                !! AXY (25/02/10): set up level depth (top of level) 
    1519                fdep  = fsdepw(ji,jj,jk) 
    1520                !! AXY (01/03/10): set up level depth (bottom of level) 
    1521                fdep1 = fdep + fthk 
    1522                !! AXY (28/11/16): local seafloor depth 
    1523                !!                 previously mbathy(ji,jj) - 1, now mbathy(ji,jj) 
    1524                jmbathy = mbathy(ji,jj) 
    1525                !! 
    1526                !! set up model tracers 
    1527                !! negative values of state variables are not allowed to 
    1528                !! contribute to the calculated fluxes 
    1529                zchn = max(0.,trn(ji,jj,jk,jpchn)) !! non-diatom chlorophyll 
    1530                zchd = max(0.,trn(ji,jj,jk,jpchd)) !! diatom chlorophyll 
    1531                zphn = max(0.,trn(ji,jj,jk,jpphn)) !! non-diatoms 
    1532                zphd = max(0.,trn(ji,jj,jk,jpphd)) !! diatoms 
    1533                zpds = max(0.,trn(ji,jj,jk,jppds)) !! diatom silicon 
    1534                !! AXY (28/01/10): probably need to take account of chl/biomass connection 
    1535                if (zchn.eq.0.) zphn = 0. 
    1536                if (zchd.eq.0.) zphd = 0. 
    1537                if (zphn.eq.0.) zchn = 0. 
    1538                if (zphd.eq.0.) zchd = 0. 
    1539           !! AXY (23/01/14): duh - why did I forget diatom silicon? 
    1540           if (zpds.eq.0.) zphd = 0. 
    1541           if (zphd.eq.0.) zpds = 0. 
    1542                zzmi = max(0.,trn(ji,jj,jk,jpzmi)) !! microzooplankton 
    1543                zzme = max(0.,trn(ji,jj,jk,jpzme)) !! mesozooplankton 
    1544                zdet = max(0.,trn(ji,jj,jk,jpdet)) !! detrital nitrogen 
    1545                zdin = max(0.,trn(ji,jj,jk,jpdin)) !! dissolved inorganic nitrogen 
    1546                zsil = max(0.,trn(ji,jj,jk,jpsil)) !! dissolved silicic acid 
    1547                zfer = max(0.,trn(ji,jj,jk,jpfer)) !! dissolved "iron" 
    1548 # if defined key_roam 
    1549                zdtc = max(0.,trn(ji,jj,jk,jpdtc)) !! detrital carbon 
    1550                zdic = max(0.,trn(ji,jj,jk,jpdic)) !! dissolved inorganic carbon 
    1551                zalk = max(0.,trn(ji,jj,jk,jpalk)) !! alkalinity 
    1552                zoxy = max(0.,trn(ji,jj,jk,jpoxy)) !! oxygen 
    1553 #  if defined key_axy_carbchem && defined key_mocsy 
    1554                zpho = max(0.,trn(ji,jj,jk,jpdin)) / 16.0 !! phosphate via DIN and Redfield 
    1555 #  endif 
    1556                !! 
    1557                !! also need physical parameters for gas exchange calculations 
    1558                ztmp = tsn(ji,jj,jk,jp_tem) 
    1559                zsal = tsn(ji,jj,jk,jp_sal) 
    1560                !! 
    1561           !! AXY (28/02/14): check input fields 
    1562                if (ztmp .lt. -3.0 .or. ztmp .gt. 40.0 ) then 
    1563                   IF(lwp) WRITE(numout,*) ' trc_bio_medusa: T WARNING 2D, ', & 
    1564                   tsb(ji,jj,jk,jp_tem), tsn(ji,jj,jk,jp_tem), ' at (',    & 
    1565                   ji, ',', jj, ',', jk, ') at time', kt 
    1566         IF(lwp) WRITE(numout,*) ' trc_bio_medusa: T SWITCHING 2D, ', & 
    1567                   tsn(ji,jj,jk,jp_tem), ' -> ', tsb(ji,jj,jk,jp_tem) 
    1568                   ztmp = tsb(ji,jj,jk,jp_tem) !! temperature 
    1569                endif 
    1570                if (zsal .lt. 0.0 .or. zsal .gt. 45.0 ) then 
    1571                   IF(lwp) WRITE(numout,*) ' trc_bio_medusa: S WARNING 2D, ', & 
    1572                   tsb(ji,jj,jk,jp_sal), tsn(ji,jj,jk,jp_sal), ' at (',    & 
    1573                   ji, ',', jj, ',', jk, ') at time', kt 
    1574                endif 
     1507                endif 
    15751508# else 
    1576                zdtc = zdet * xthetad              !! implicit detrital carbon 
     1509                zdtc = zdet * xthetad              !! implicit detrital carbon 
    15771510# endif 
    15781511# if defined key_debug_medusa 
    1579                if (idf.eq.1) then 
    1580                !! AXY (15/01/10) 
    1581                   if (trn(ji,jj,jk,jpdin).lt.0.) then 
    1582                      IF (lwp) write (numout,*) '------------------------------' 
    1583                      IF (lwp) write (numout,*) 'NEGATIVE DIN ERROR =', trn(ji,jj,jk,jpdin) 
    1584                      IF (lwp) write (numout,*) 'NEGATIVE DIN ERROR @', ji, jj, jk, kt 
    1585                   endif 
    1586                   if (trn(ji,jj,jk,jpsil).lt.0.) then 
    1587                      IF (lwp) write (numout,*) '------------------------------' 
    1588                      IF (lwp) write (numout,*) 'NEGATIVE SIL ERROR =', trn(ji,jj,jk,jpsil) 
    1589                      IF (lwp) write (numout,*) 'NEGATIVE SIL ERROR @', ji, jj, jk, kt 
    1590                   endif 
     1512                if (idf.eq.1) then 
     1513                   !! AXY (15/01/10) 
     1514                   if (trn(ji,jj,jk,jpdin).lt.0.) then 
     1515                      IF ( lwp ) write (numout,*) '------------------------------' 
     1516                      IF ( lwp ) write (numout,*) 'NEGATIVE DIN ERROR =', trn(ji,jj,jk,jpdin) 
     1517                      IF ( lwp ) write (numout,*) 'NEGATIVE DIN ERROR @', ji, jj, jk, kt 
     1518                   endif 
     1519                   if (trn(ji,jj,jk,jpsil).lt.0.) then 
     1520                      IF ( lwp ) write (numout,*) '------------------------------' 
     1521                      IF ( lwp ) write (numout,*) 'NEGATIVE SIL ERROR =', trn(ji,jj,jk,jpsil) 
     1522                      IF ( lwp ) write (numout,*) 'NEGATIVE SIL ERROR @', ji, jj, jk, kt 
     1523                   endif 
    15911524#  if defined key_roam 
    1592                   if (trn(ji,jj,jk,jpdic).lt.0.) then 
    1593                      IF (lwp) write (numout,*) '------------------------------' 
    1594                      IF (lwp) write (numout,*) 'NEGATIVE DIC ERROR =', trn(ji,jj,jk,jpdic) 
    1595                      IF (lwp) write (numout,*) 'NEGATIVE DIC ERROR @', ji, jj, jk, kt 
    1596                   endif 
    1597                   if (trn(ji,jj,jk,jpalk).lt.0.) then 
    1598                      IF (lwp) write (numout,*) '------------------------------' 
    1599                      IF (lwp) write (numout,*) 'NEGATIVE ALK ERROR =', trn(ji,jj,jk,jpalk) 
    1600                      IF (lwp) write (numout,*) 'NEGATIVE ALK ERROR @', ji, jj, jk, kt 
    1601                   endif 
    1602                   if (trn(ji,jj,jk,jpoxy).lt.0.) then 
    1603                      IF (lwp) write (numout,*) '------------------------------' 
    1604                      IF (lwp) write (numout,*) 'NEGATIVE OXY ERROR =', trn(ji,jj,jk,jpoxy) 
    1605                      IF (lwp) write (numout,*) 'NEGATIVE OXY ERROR @', ji, jj, jk, kt 
    1606                   endif 
     1525                   if (trn(ji,jj,jk,jpdic).lt.0.) then 
     1526                      IF ( lwp ) write (numout,*) '------------------------------' 
     1527                      IF ( lwp ) write (numout,*) 'NEGATIVE DIC ERROR =', trn(ji,jj,jk,jpdic) 
     1528                      IF ( lwp ) write (numout,*) 'NEGATIVE DIC ERROR @', ji, jj, jk, kt 
     1529                   endif 
     1530                   if (trn(ji,jj,jk,jpalk).lt.0.) then 
     1531                      IF ( lwp ) write (numout,*) '------------------------------' 
     1532                      IF ( lwp ) write (numout,*) 'NEGATIVE ALK ERROR =', trn(ji,jj,jk,jpalk) 
     1533                      IF ( lwp ) write (numout,*) 'NEGATIVE ALK ERROR @', ji, jj, jk, kt 
     1534                   endif 
     1535                   if (trn(ji,jj,jk,jpoxy).lt.0.) then 
     1536                      IF ( lwp ) write (numout,*) '------------------------------' 
     1537                      IF ( lwp ) write (numout,*) 'NEGATIVE OXY ERROR =', trn(ji,jj,jk,jpoxy) 
     1538                      IF ( lwp ) write (numout,*) 'NEGATIVE OXY ERROR @', ji, jj, jk, kt 
     1539                   endif 
    16071540#  endif 
    1608                endif 
     1541                endif 
    16091542# endif 
    1610 # if defined key_debug_medusa 
    1611                !! report state variable values 
    1612                if (idf.eq.1.AND.idfval.eq.1) then 
    1613                   IF (lwp) write (numout,*) '------------------------------' 
    1614                   IF (lwp) write (numout,*) 'fthk(',jk,') = ', fthk 
    1615                   IF (lwp) write (numout,*) 'zphn(',jk,') = ', zphn 
    1616                   IF (lwp) write (numout,*) 'zphd(',jk,') = ', zphd 
    1617                   IF (lwp) write (numout,*) 'zpds(',jk,') = ', zpds 
    1618                   IF (lwp) write (numout,*) 'zzmi(',jk,') = ', zzmi 
    1619                   IF (lwp) write (numout,*) 'zzme(',jk,') = ', zzme 
    1620                   IF (lwp) write (numout,*) 'zdet(',jk,') = ', zdet 
    1621                   IF (lwp) write (numout,*) 'zdin(',jk,') = ', zdin 
    1622                   IF (lwp) write (numout,*) 'zsil(',jk,') = ', zsil 
    1623                   IF (lwp) write (numout,*) 'zfer(',jk,') = ', zfer 
    1624 #  if defined key_roam 
    1625                   IF (lwp) write (numout,*) 'zdtc(',jk,') = ', zdtc 
    1626                   IF (lwp) write (numout,*) 'zdic(',jk,') = ', zdic 
    1627                   IF (lwp) write (numout,*) 'zalk(',jk,') = ', zalk 
    1628                   IF (lwp) write (numout,*) 'zoxy(',jk,') = ', zoxy                   
     1543                !! sum tracers for inventory checks 
     1544                IF( lk_iomput ) THEN 
     1545                   IF ( med_diag%INVTN%dgsave )   THEN 
     1546                      ftot_n(ji,jj)  = ftot_n(ji,jj) + & 
     1547                           (fthk * ( zphn + zphd + zzmi + zzme + zdet + zdin ) ) 
     1548                   ENDIF 
     1549                   IF ( med_diag%INVTSI%dgsave )  THEN 
     1550                      ftot_si(ji,jj) = ftot_si(ji,jj) + &  
     1551                           (fthk * ( zpds + zsil ) ) 
     1552                   ENDIF 
     1553                   IF ( med_diag%INVTFE%dgsave )  THEN 
     1554                      ftot_fe(ji,jj) = ftot_fe(ji,jj) + &  
     1555                           (fthk * ( xrfn * ( zphn + zphd + zzmi + zzme + zdet ) + zfer ) ) 
     1556                   ENDIF 
     1557# if defined key_roam 
     1558                   IF ( med_diag%INVTC%dgsave )  THEN 
     1559                      ftot_c(ji,jj)  = ftot_c(ji,jj) + &  
     1560                           (fthk * ( (xthetapn * zphn) + (xthetapd * zphd) + & 
     1561                           (xthetazmi * zzmi) + (xthetazme * zzme) + zdtc +   & 
     1562                           zdic ) ) 
     1563                   ENDIF 
     1564                   IF ( med_diag%INVTALK%dgsave ) THEN 
     1565                      ftot_a(ji,jj)  = ftot_a(ji,jj) + (fthk * ( zalk ) ) 
     1566                   ENDIF 
     1567                   IF ( med_diag%INVTO2%dgsave )  THEN 
     1568                      ftot_o2(ji,jj) = ftot_o2(ji,jj) + (fthk * ( zoxy ) ) 
     1569                   ENDIF 
     1570                   !! 
     1571                   !! AXY (10/11/16): CMIP6 diagnostics 
     1572                   IF ( med_diag%INTDISSIC%dgsave ) THEN 
     1573                      intdissic(ji,jj) = intdissic(ji,jj) + (fthk * zdic) 
     1574                   ENDIF 
     1575                   IF ( med_diag%INTDISSIN%dgsave ) THEN 
     1576                      intdissin(ji,jj) = intdissin(ji,jj) + (fthk * zdin) 
     1577                   ENDIF 
     1578                   IF ( med_diag%INTDISSISI%dgsave ) THEN 
     1579                      intdissisi(ji,jj) = intdissisi(ji,jj) + (fthk * zsil) 
     1580                   ENDIF 
     1581                   IF ( med_diag%INTTALK%dgsave ) THEN 
     1582                      inttalk(ji,jj) = inttalk(ji,jj) + (fthk * zalk) 
     1583                   ENDIF 
     1584                   IF ( med_diag%O2min%dgsave ) THEN 
     1585                      if ( zoxy < o2min(ji,jj) ) then 
     1586                         o2min(ji,jj)  = zoxy 
     1587                         IF ( med_diag%ZO2min%dgsave ) THEN 
     1588                            zo2min(ji,jj) = (fdep + fdep1) / 2. !! layer midpoint 
     1589                         ENDIF 
     1590                      endif 
     1591                   ENDIF 
     1592# endif 
     1593                ENDIF 
     1594 
     1595                CALL flush(numout) 
     1596 
     1597                !!====================================================================== 
     1598                !! LOCAL GRID CELL CALCULATIONS 
     1599                !!====================================================================== 
     1600                !! 
     1601                !!====================================================================== 
     1602                !! AXY (07/04/17): possible subroutine block; air-sea gas exchange 
     1603                !!====================================================================== 
     1604# if defined key_roam 
     1605                if ( jk .eq. 1 ) then 
     1606                   !!---------------------------------------------------------------------- 
     1607                   !! Air-sea gas exchange 
     1608                   !!---------------------------------------------------------------------- 
     1609                   !! 
     1610                   !! AXY (17/07/14): zwind_i and zwind_j do not exist in this 
     1611                   !!                 version of NEMO because it does not include 
     1612                   !!                 the SBC changes that our local version has 
     1613                   !!                 for accessing the HadGEM2 forcing; they  
     1614                   !!                 could be added, but an alternative approach 
     1615                   !!                 is to make use of wndm from oce_trc.F90 
     1616                   !!                 which is wind speed at 10m (which is what 
     1617                   !!                 is required here; this may need to be 
     1618                   !!                 revisited when MEDUSA properly interacts 
     1619                   !!                 with UKESM1 physics 
     1620                   !! 
     1621                   f_wind  = wndm(ji,jj) 
     1622                   IF ( lk_oasis ) THEN 
     1623                      f_xco2a = PCO2a_in_cpl(ji,jj)        !! use 2D atm xCO2 from atm coupling 
     1624                   ENDIF 
     1625                   !! 
     1626                   !! AXY (23/06/15): as part of an effort to update the carbonate chemistry 
     1627                   !!                 in MEDUSA, the gas transfer velocity used in the carbon 
     1628                   !!                 and oxygen cycles has been harmonised and is calculated 
     1629                   !!                 by the same function here; this harmonisation includes 
     1630                   !!                 changes to the PML carbonate chemistry scheme so that 
     1631                   !!                 it too makes use of the same gas transfer velocity; the 
     1632                   !!                 preferred parameterisation of this is Wanninkhof (2014), 
     1633                   !!                 option 7 
     1634                   !! 
     1635#   if defined key_debug_medusa 
     1636                   IF ( lwp ) write (numout,*) 'trc_bio_medusa: entering gas_transfer' 
     1637                   CALL flush(numout) 
     1638#   endif 
     1639                   CALL gas_transfer( f_wind, 1, 7, &  ! inputs 
     1640                        f_kw660 )        ! outputs 
     1641#   if defined key_debug_medusa 
     1642                   IF ( lwp ) write (numout,*) 'trc_bio_medusa: exiting gas_transfer' 
     1643                   CALL flush(numout) 
     1644#   endif 
     1645                   !! 
     1646                   !! air pressure (atm); ultimately this will use air pressure at the base 
     1647                   !! of the UKESM1 atmosphere  
     1648                   !!                                      
     1649                   f_pp0   = 1.0 
     1650                   !! 
     1651                   !! IF(lwp) WRITE(numout,*) ' MEDUSA ztmp    =', ztmp 
     1652                   !! IF(lwp) WRITE(numout,*) ' MEDUSA zwind_i =', zwind_i(ji,jj) 
     1653                   !! IF(lwp) WRITE(numout,*) ' MEDUSA zwind_j =', zwind_j(ji,jj) 
     1654                   !! IF(lwp) WRITE(numout,*) ' MEDUSA f_wind  =', f_wind 
     1655                   !! IF(lwp) WRITE(numout,*) ' MEDUSA fr_i    =', fr_i(ji,jj) 
     1656                   !! 
     1657#  if defined key_axy_carbchem 
     1658                   !! 
     1659                   !! AXY (22/06/15): use Orr & Epitalon (2015) MOCSY-2 carbonate 
     1660                   !!                 chemistry package; note that depth is set to 
     1661                   !!                 zero in this call 
     1662                   CALL mocsy_interface( ztmp, zsal, zalk, zdic, zsil, zpho,        &  ! inputs 
     1663                        f_pp0, 0.0, flatx, f_kw660, f_xco2a, 1,                          &  ! inputs 
     1664                        f_ph, f_pco2w, f_fco2w, f_h2co3, f_hco3, f_co3, f_omarg(ji,jj),  &  ! outputs 
     1665                        f_omcal(ji,jj), f_BetaD, f_rhosw, f_opres, f_insitut,            &  ! outputs 
     1666                        f_pco2atm, f_fco2atm, f_schmidtco2, f_kwco2, f_K0,               &  ! outputs 
     1667                        f_co2starair, f_co2flux, f_dpco2 )                                  ! outputs 
     1668                   !! 
     1669                   f_TDIC = (zdic / f_rhosw) * 1000. ! mmol / m3 -> umol / kg 
     1670                   f_TALK = (zalk / f_rhosw) * 1000. !  meq / m3 ->  ueq / kg 
     1671                   f_dcf  = f_rhosw 
     1672#  else 
     1673                   !! AXY (18/04/13): switch off carbonate chemistry calculations; provide 
     1674                   !!                 quasi-sensible alternatives 
     1675                   f_ph           = 8.1 
     1676                   f_pco2w        = f_xco2a 
     1677                   f_h2co3        = 0.005 * zdic 
     1678                   f_hco3         = 0.865 * zdic 
     1679                   f_co3          = 0.130 * zdic 
     1680                   f_omcal(ji,jj) = 4. 
     1681                   f_omarg(ji,jj) = 2. 
     1682                   f_co2flux      = 0. 
     1683                   f_TDIC         = zdic 
     1684                   f_TALK         = zalk 
     1685                   f_dcf          = 1.026 
     1686                   f_henry        = 1. 
     1687                   !! AXY (23/06/15): add in some extra MOCSY diagnostics 
     1688                   f_fco2w        = f_xco2a 
     1689                   f_BetaD        = 1. 
     1690                   f_rhosw        = 1.026 
     1691                   f_opres        = 0. 
     1692                   f_insitut      = ztmp 
     1693                   f_pco2atm      = f_xco2a 
     1694                   f_fco2atm      = f_xco2a 
     1695                   f_schmidtco2   = 660. 
     1696                   f_kwco2        = 0. 
     1697                   f_K0           = 0. 
     1698                   f_co2starair   = f_xco2a 
     1699                   f_dpco2        = 0. 
    16291700#  endif 
    1630                endif 
    1631 # endif 
    1632  
    1633 # if defined key_debug_medusa 
    1634                if (idf.eq.1.AND.idfval.eq.1.AND.jk.eq.1) then 
    1635                   IF (lwp) write (numout,*) '------------------------------' 
    1636                   IF (lwp) write (numout,*) 'dust      = ', dust(ji,jj) 
    1637                endif 
    1638 # endif 
    1639  
    1640                !! sum tracers for inventory checks 
    1641                IF( lk_iomput ) THEN 
    1642                   IF ( med_diag%INVTN%dgsave )   THEN 
    1643                      ftot_n(ji,jj)  = ftot_n(ji,jj) + & 
    1644                              (fthk * ( zphn + zphd + zzmi + zzme + zdet + zdin ) ) 
    1645                   ENDIF 
    1646                   IF ( med_diag%INVTSI%dgsave )  THEN 
    1647                      ftot_si(ji,jj) = ftot_si(ji,jj) + &  
    1648                              (fthk * ( zpds + zsil ) ) 
    1649                   ENDIF 
    1650                   IF ( med_diag%INVTFE%dgsave )  THEN 
    1651                      ftot_fe(ji,jj) = ftot_fe(ji,jj) + &  
    1652                              (fthk * ( xrfn * ( zphn + zphd + zzmi + zzme + zdet ) + zfer ) ) 
    1653                   ENDIF 
    1654 # if defined key_roam 
    1655                   IF ( med_diag%INVTC%dgsave )  THEN 
    1656                      ftot_c(ji,jj)  = ftot_c(ji,jj) + &  
    1657                              (fthk * ( (xthetapn * zphn) + (xthetapd * zphd) + & 
    1658                              (xthetazmi * zzmi) + (xthetazme * zzme) + zdtc +   & 
    1659                              zdic ) ) 
    1660                   ENDIF 
    1661                   IF ( med_diag%INVTALK%dgsave ) THEN 
    1662                      ftot_a(ji,jj)  = ftot_a(ji,jj) + (fthk * ( zalk ) ) 
    1663                   ENDIF 
    1664                   IF ( med_diag%INVTO2%dgsave )  THEN 
    1665                      ftot_o2(ji,jj) = ftot_o2(ji,jj) + (fthk * ( zoxy ) ) 
    1666                   ENDIF 
    1667                   !! 
    1668                   !! AXY (10/11/16): CMIP6 diagnostics 
    1669                   IF ( med_diag%INTDISSIC%dgsave ) THEN 
    1670                      intdissic(ji,jj) = intdissic(ji,jj) + (fthk * zdic) 
    1671                   ENDIF 
    1672                   IF ( med_diag%INTDISSIN%dgsave ) THEN 
    1673                      intdissin(ji,jj) = intdissin(ji,jj) + (fthk * zdin) 
    1674                   ENDIF 
    1675                   IF ( med_diag%INTDISSISI%dgsave ) THEN 
    1676                      intdissisi(ji,jj) = intdissisi(ji,jj) + (fthk * zsil) 
    1677                   ENDIF 
    1678                   IF ( med_diag%INTTALK%dgsave ) THEN 
    1679                      inttalk(ji,jj) = inttalk(ji,jj) + (fthk * zalk) 
    1680                   ENDIF 
    1681                   IF ( med_diag%O2min%dgsave ) THEN 
    1682                      if ( zoxy < o2min(ji,jj) ) then 
    1683                         o2min(ji,jj)  = zoxy 
    1684                         IF ( med_diag%ZO2min%dgsave ) THEN 
    1685                            zo2min(ji,jj) = (fdep + fdep1) / 2. !! layer midpoint 
    1686                         ENDIF 
    1687                      endif 
    1688                   ENDIF 
    1689 # endif 
    1690                ENDIF 
    1691  
    1692                CALL flush(numout) 
    1693  
    1694                !!====================================================================== 
    1695                !! LOCAL GRID CELL CALCULATIONS 
    1696                !!====================================================================== 
    1697                !! 
    1698 # if defined key_roam 
    1699                if ( jk .eq. 1 ) then 
    1700                   !!---------------------------------------------------------------------- 
    1701                   !! Air-sea gas exchange 
    1702                   !!---------------------------------------------------------------------- 
    1703                   !! 
    1704                   !! AXY (17/07/14): zwind_i and zwind_j do not exist in this 
    1705                   !!                 version of NEMO because it does not include 
    1706                   !!                 the SBC changes that our local version has 
    1707                   !!                 for accessing the HadGEM2 forcing; they  
    1708                   !!                 could be added, but an alternative approach 
    1709                   !!                 is to make use of wndm from oce_trc.F90 
    1710                   !!                 which is wind speed at 10m (which is what 
    1711                   !!                 is required here; this may need to be 
    1712                   !!                 revisited when MEDUSA properly interacts 
    1713                   !!                 with UKESM1 physics 
    1714                   !! 
    1715                   f_wind  = wndm(ji,jj) 
    1716                   IF (lk_oasis) THEN 
    1717                      f_xco2a = PCO2a_in_cpl(ji,jj)        !! use 2D atm xCO2 from atm coupling 
    1718                   ENDIF 
    1719                   !! 
    1720                   !! AXY (23/06/15): as part of an effort to update the carbonate chemistry 
    1721                   !!                 in MEDUSA, the gas transfer velocity used in the carbon 
    1722                   !!                 and oxygen cycles has been harmonised and is calculated 
    1723                   !!                 by the same function here; this harmonisation includes 
    1724                   !!                 changes to the PML carbonate chemistry scheme so that 
    1725                   !!                 it too makes use of the same gas transfer velocity; the 
    1726                   !!                 preferred parameterisation of this is Wanninkhof (2014), 
    1727                   !!                 option 7 
    1728                   !! 
     1701                   !! 
     1702                   !! mmol/m2/s -> mmol/m3/d; correct for sea-ice; divide through by layer thickness 
     1703                   f_co2flux = (1. - fr_i(ji,jj)) * f_co2flux * 86400. / fthk 
     1704                   !! 
     1705                   !! oxygen (O2); OCMIP-2 code 
     1706                   !! AXY (23/06/15): amend input list for oxygen to account for common gas 
     1707                   !!                 transfer velocity 
     1708                   !! CALL trc_oxy_medusa( ztmp, zsal, f_uwind, f_vwind, f_pp0, zoxy / 1000., fthk,  &  ! inputs 
     1709                   !! f_kw660, f_o2flux, f_o2sat )                                                      ! outputs 
     1710                   CALL trc_oxy_medusa( ztmp, zsal, f_kw660, f_pp0, zoxy,  &  ! inputs 
     1711                        f_kwo2, f_o2flux, f_o2sat )                                ! outputs 
     1712                   !! 
     1713                   !! mmol/m2/s -> mol/m3/d; correct for sea-ice; divide through by layer thickness 
     1714                   f_o2flux  = (1. - fr_i(ji,jj)) * f_o2flux * 86400. / fthk 
     1715                   !! 
     1716                   !! Jpalm (08-2014) 
     1717                   !! DMS surface concentration calculation; initialy added using MET-OFFICE subroutine 
     1718                   !! air-sea flux calculated in atmospheric chemistry from atm and ocn concentrations 
     1719                   !! 
     1720                   !! AXY (13/03/15): this is amended to calculate all of the DMS 
     1721                   !!                 estimates examined during UKESM1 (see comments 
     1722                   !!                 in trcdms_medusa.F90) 
     1723                   !! 
     1724                   !! AXY (28/03/17): amended to pass DIN limitation instead of DIN concentration; 
     1725                   !!                 accounts for differences in nutrient half-saturations; changes  
     1726                   !!                 also made in trc_dms_medusa 
     1727                   !! 
     1728                   IF (jdms .eq. 1) THEN 
     1729                      !! 
     1730                      !! calculate weighted half-saturation for DIN uptake 
     1731                      dms_wtkn = ((zphn * xnln) + (zphd * xnld)) / (zphn + zphd) 
     1732                      !! 
     1733                      !! feed in correct inputs 
     1734                      if (jdms_input .eq. 0) then 
     1735                         !! use instantaneous inputs 
     1736                         dms_nlim = zdin / (zdin + dms_wtkn) 
     1737                         !! 
     1738                         CALL trc_dms_medusa( zchn, zchd, hmld(ji,jj), qsr(ji,jj), dms_nlim, &  ! inputs 
     1739                              dms_andr, dms_simo, dms_aran, dms_hall )                               ! outputs 
     1740                      else 
     1741                         !! use diel-average inputs 
     1742                         dms_nlim = zn_dms_din(ji,jj) / (zn_dms_din(ji,jj) + dms_wtkn)  
     1743                         !! 
     1744                         CALL trc_dms_medusa( zn_dms_chn(ji,jj), zn_dms_chd(ji,jj), &  ! inputs 
     1745                              zn_dms_mld(ji,jj), zn_dms_qsr(ji,jj), dms_nlim,            &  ! inputs 
     1746                              dms_andr, dms_simo, dms_aran, dms_hall )                      ! outputs 
     1747                      endif 
     1748                      !! 
     1749                      !! assign correct output to variable passed to atmosphere 
     1750                      if     (jdms_model .eq. 1) then 
     1751                         dms_surf = dms_andr 
     1752                      elseif (jdms_model .eq. 2) then 
     1753                         dms_surf = dms_simo 
     1754                      elseif (jdms_model .eq. 3) then 
     1755                         dms_surf = dms_aran 
     1756                      elseif (jdms_model .eq. 4) then 
     1757                         dms_surf = dms_hall 
     1758                      endif 
     1759                      !! 
     1760                      !! 2D diag through iom_use 
     1761                      IF( lk_iomput ) THEN 
     1762                         IF( med_diag%DMS_SURF%dgsave ) THEN 
     1763                            dms_surf2d(ji,jj) = dms_surf 
     1764                         ENDIF 
     1765                         IF( med_diag%DMS_ANDR%dgsave ) THEN 
     1766                            dms_andr2d(ji,jj) = dms_andr 
     1767                         ENDIF 
     1768                         IF( med_diag%DMS_SIMO%dgsave ) THEN 
     1769                            dms_simo2d(ji,jj) = dms_simo 
     1770                         ENDIF 
     1771                         IF( med_diag%DMS_ARAN%dgsave ) THEN 
     1772                            dms_aran2d(ji,jj) = dms_aran 
     1773                         ENDIF 
     1774                         IF( med_diag%DMS_HALL%dgsave ) THEN 
     1775                            dms_hall2d(ji,jj) = dms_hall 
     1776                         ENDIF 
    17291777#   if defined key_debug_medusa 
    1730                      IF (lwp) write (numout,*) 'trc_bio_medusa: entering gas_transfer' 
    1731                      CALL flush(numout) 
    1732 #   endif 
    1733                   CALL gas_transfer( f_wind, 1, 7, &  ! inputs 
    1734                                      f_kw660 )        ! outputs 
    1735 #   if defined key_debug_medusa 
    1736                      IF (lwp) write (numout,*) 'trc_bio_medusa: exiting gas_transfer' 
    1737                      CALL flush(numout) 
    1738 #   endif 
    1739                   !! 
    1740                   !! air pressure (atm); ultimately this will use air pressure at the base 
    1741                   !! of the UKESM1 atmosphere  
    1742                   !!                                      
    1743                   f_pp0   = 1.0 
    1744                   !! 
    1745                   !! IF(lwp) WRITE(numout,*) ' MEDUSA ztmp    =', ztmp 
    1746                   !! IF(lwp) WRITE(numout,*) ' MEDUSA zwind_i =', zwind_i(ji,jj) 
    1747                   !! IF(lwp) WRITE(numout,*) ' MEDUSA zwind_j =', zwind_j(ji,jj) 
    1748                   !! IF(lwp) WRITE(numout,*) ' MEDUSA f_wind  =', f_wind 
    1749                   !! IF(lwp) WRITE(numout,*) ' MEDUSA fr_i    =', fr_i(ji,jj) 
    1750                   !! 
    1751 #  if defined key_axy_carbchem 
    1752 #   if defined key_mocsy 
    1753                   !! 
    1754                   !! AXY (22/06/15): use Orr & Epitalon (2015) MOCSY-2 carbonate 
    1755                   !!                 chemistry package; note that depth is set to 
    1756                   !!                 zero in this call 
    1757                   CALL mocsy_interface( ztmp, zsal, zalk, zdic, zsil, zpho,        &  ! inputs 
    1758                   f_pp0, 0.0, gphit(ji,jj), f_kw660, f_xco2a, 1,                   &  ! inputs 
    1759                   f_ph, f_pco2w, f_fco2w, f_h2co3, f_hco3, f_co3, f_omarg(ji,jj),  &  ! outputs 
    1760                   f_omcal(ji,jj), f_BetaD, f_rhosw, f_opres, f_insitut,            &  ! outputs 
    1761                   f_pco2atm, f_fco2atm, f_schmidtco2, f_kwco2, f_K0,               &  ! outputs 
    1762                   f_co2starair, f_co2flux, f_dpco2 )                                  ! outputs 
    1763                   !! 
    1764                   f_TDIC = (zdic / f_rhosw) * 1000. ! mmol / m3 -> umol / kg 
    1765                   f_TALK = (zalk / f_rhosw) * 1000. !  meq / m3 ->  ueq / kg 
    1766                   f_dcf  = f_rhosw 
    1767 #   else                   
    1768                   iters = 0 
    1769                   !! 
    1770                   !! carbon dioxide (CO2); Jerry Blackford code (ostensibly OCMIP-2, but not) 
    1771                   CALL trc_co2_medusa( ztmp, zsal, zdic, zalk, 0.0, f_kw660, f_xco2a,  &  ! inputs 
    1772                   f_ph, f_pco2w, f_h2co3, f_hco3, f_co3, f_omcal(ji,jj),               &  ! outputs 
    1773                   f_omarg(ji,jj), f_co2flux, f_TDIC, f_TALK, f_dcf, f_henry, iters )      ! outputs 
    1774                   !! 
    1775                   !! AXY (09/01/14): removed iteration and NaN checks; these have 
    1776                   !!                 been moved to trc_co2_medusa together with a 
    1777                   !!                 fudge that amends erroneous values (this is 
    1778                   !!                 intended to be a temporary fudge!); the 
    1779                   !!                 output warnings are retained here so that 
    1780                   !!                 failure position can be determined 
    1781                   if (iters .eq. 25) then 
    1782                      IF(lwp) WRITE(numout,*) ' trc_bio_medusa: ITERS WARNING, ', & 
    1783                      iters, ' AT (', ji, ', ', jj, ', ', jk, ') AT ', kt 
    1784                   endif 
    1785 #   endif 
    1786 #  else 
    1787                   !! AXY (18/04/13): switch off carbonate chemistry calculations; provide 
    1788                   !!                 quasi-sensible alternatives 
    1789                   f_ph           = 8.1 
    1790                   f_pco2w        = f_xco2a 
    1791                   f_h2co3        = 0.005 * zdic 
    1792                   f_hco3         = 0.865 * zdic 
    1793                   f_co3          = 0.130 * zdic 
    1794                   f_omcal(ji,jj) = 4. 
    1795                   f_omarg(ji,jj) = 2. 
    1796                   f_co2flux      = 0. 
    1797                   f_TDIC         = zdic 
    1798                   f_TALK         = zalk 
    1799                   f_dcf          = 1.026 
    1800                   f_henry        = 1. 
    1801                   !! AXY (23/06/15): add in some extra MOCSY diagnostics 
    1802                   f_fco2w        = f_xco2a 
    1803                   f_BetaD        = 1. 
    1804                   f_rhosw        = 1.026 
    1805                   f_opres        = 0. 
    1806                   f_insitut      = ztmp 
    1807                   f_pco2atm      = f_xco2a 
    1808                   f_fco2atm      = f_xco2a 
    1809                   f_schmidtco2   = 660. 
    1810                   f_kwco2        = 0. 
    1811                   f_K0           = 0. 
    1812                   f_co2starair   = f_xco2a 
    1813                   f_dpco2        = 0. 
    1814 #  endif 
    1815                   !! 
    1816                   !! mmol/m2/s -> mmol/m3/d; correct for sea-ice; divide through by layer thickness 
    1817                   f_co2flux = (1. - fr_i(ji,jj)) * f_co2flux * 86400. / fthk 
    1818                   !! 
    1819                   !! oxygen (O2); OCMIP-2 code 
    1820                   !! AXY (23/06/15): amend input list for oxygen to account for common gas 
    1821                   !!                 transfer velocity 
    1822                   !! CALL trc_oxy_medusa( ztmp, zsal, f_uwind, f_vwind, f_pp0, zoxy / 1000., fthk,  &  ! inputs 
    1823                   !! f_kw660, f_o2flux, f_o2sat )                                                      ! outputs 
    1824                   CALL trc_oxy_medusa( ztmp, zsal, f_kw660, f_pp0, zoxy,  &  ! inputs 
    1825                   f_kwo2, f_o2flux, f_o2sat )                                ! outputs 
    1826                   !! 
    1827                   !! mmol/m2/s -> mol/m3/d; correct for sea-ice; divide through by layer thickness 
    1828                   f_o2flux  = (1. - fr_i(ji,jj)) * f_o2flux * 86400. / fthk 
    1829                   !! 
    1830                   !! Jpalm (08-2014) 
    1831                   !! DMS surface concentration calculation 
    1832                   !! initialy added for UKESM1 model. 
    1833                   !! using MET-OFFICE subroutine. 
    1834                   !! DMS module only needs Chl concentration and MLD 
    1835                   !! to get an aproximate value of DMS concentration. 
    1836                   !! air-sea fluxes are calculated by atmospheric chemitry model 
    1837                   !! from atm and oc-surface concentrations. 
    1838                   !! 
    1839                   !! AXY (13/03/15): this is amended to calculate all of the DMS 
    1840                   !!                 estimates examined during UKESM1 (see comments 
    1841                   !!                 in trcdms_medusa.F90) 
    1842                   !! 
    1843                   IF (jdms .eq. 1) THEN 
    1844                      !! 
    1845                      !! feed in correct inputs 
    1846                      if (jdms_input .eq. 0) then 
    1847                         !! use instantaneous inputs 
    1848                         CALL trc_dms_medusa( zchn, zchd, hmld(ji,jj), qsr(ji,jj), zdin, &  ! inputs 
    1849                         dms_andr, dms_simo, dms_aran, dms_hall )                           ! outputs 
    1850                      else 
    1851                         !! use diel-average inputs 
    1852                         CALL trc_dms_medusa( zn_dms_chn(ji,jj), zn_dms_chd(ji,jj), &  ! inputs 
    1853                         zn_dms_mld(ji,jj), zn_dms_qsr(ji,jj), zn_dms_din(ji,jj),   &  ! inputs 
    1854                         dms_andr, dms_simo, dms_aran, dms_hall )                      ! outputs 
    1855                      endif 
    1856                      !! 
    1857                      !! assign correct output to variable passed to atmosphere 
    1858                      if     (jdms_model .eq. 1) then 
    1859                         dms_surf = dms_andr 
    1860                      elseif (jdms_model .eq. 2) then 
    1861                         dms_surf = dms_simo 
    1862                      elseif (jdms_model .eq. 3) then 
    1863                         dms_surf = dms_aran 
    1864                      elseif (jdms_model .eq. 4) then 
    1865                         dms_surf = dms_hall 
    1866                      endif 
    1867                      !! 
    1868                      !! 2D diag through iom_use 
    1869                      IF( lk_iomput ) THEN 
    1870                        IF( med_diag%DMS_SURF%dgsave ) THEN 
    1871                          dms_surf2d(ji,jj) = dms_surf 
    1872                        ENDIF 
    1873                        IF( med_diag%DMS_ANDR%dgsave ) THEN 
    1874                          dms_andr2d(ji,jj) = dms_andr 
    1875                        ENDIF 
    1876                        IF( med_diag%DMS_SIMO%dgsave ) THEN 
    1877                          dms_simo2d(ji,jj) = dms_simo 
    1878                        ENDIF 
    1879                        IF( med_diag%DMS_ARAN%dgsave ) THEN 
    1880                          dms_aran2d(ji,jj) = dms_aran 
    1881                        ENDIF 
    1882                        IF( med_diag%DMS_HALL%dgsave ) THEN 
    1883                          dms_hall2d(ji,jj) = dms_hall 
    1884                        ENDIF 
    1885 #   if defined key_debug_medusa 
    1886                        IF (lwp) write (numout,*) 'trc_bio_medusa: finish calculating dms' 
    1887                      CALL flush(numout) 
     1778                         IF ( lwp ) write (numout,*) 'trc_bio_medusa: finish calculating dms' 
     1779                         CALL flush(numout) 
    18881780#   endif  
    1889                      ENDIF 
    1890                      !! End iom 
    1891                   ENDIF 
    1892                   !! End DMS Loop 
    1893                   !! 
    1894                   !! store 2D outputs 
    1895                   !! 
    1896                   !! JPALM -- 17-11-16 -- put fgco2 out of diag request 
    1897                   !!                    is needed for coupling; pass through restart 
    1898                   !! IF( med_diag%FGCO2%dgsave ) THEN 
    1899                      !! convert from  mol/m2/day to kg/m2/s 
    1900                      fgco2(ji,jj) = f_co2flux * fthk * CO2flux_conv  !! mmol-C/m3/d -> kg-CO2/m2/s 
    1901                   !! ENDIF 
    1902                   IF ( lk_iomput ) THEN 
     1781                      ENDIF 
     1782                      !! End iom 
     1783                   ENDIF 
     1784                   !! End DMS Loop 
     1785                   !! 
     1786                   !! store 2D outputs 
     1787                   !! 
     1788                   !! JPALM -- 17-11-16 -- put fgco2 out of diag request 
     1789                   !!                    is needed for coupling; pass through restart 
     1790                   !! IF( med_diag%FGCO2%dgsave ) THEN 
     1791                   !! convert from  mol/m2/day to kg/m2/s 
     1792                   fgco2(ji,jj) = f_co2flux * fthk * CO2flux_conv  !! mmol-C/m3/d -> kg-CO2/m2/s 
     1793                   !! ENDIF 
     1794                   IF ( lk_iomput ) THEN 
    19031795                      IF( med_diag%ATM_PCO2%dgsave ) THEN 
    19041796                         f_pco2a2d(ji,jj) = f_pco2atm 
     
    19561848                         f_ocndpco2_2d(ji,jj) = f_dpco2 
    19571849                      ENDIF 
    1958                   ENDIF 
    1959                   !!  
    1960                endif 
    1961                !! End jk = 1 loop within ROAM key  
    1962  
    1963                !! AXY (11/11/16): CMIP6 oxygen saturation 3D diagnostic 
    1964                IF ( med_diag%O2SAT3%dgsave ) THEN 
    1965                   call oxy_sato( ztmp, zsal, f_o2sat3 ) 
    1966                   o2sat3(ji, jj, jk) = f_o2sat3 
    1967                ENDIF 
     1850                   ENDIF 
     1851                   !!  
     1852                endif 
     1853                !! End jk = 1 loop within ROAM key  
     1854 
     1855                !! AXY (11/11/16): CMIP6 oxygen saturation 3D diagnostic 
     1856                IF ( med_diag%O2SAT3%dgsave ) THEN 
     1857                   call oxy_sato( ztmp, zsal, f_o2sat3 ) 
     1858                   o2sat3(ji, jj, jk) = f_o2sat3 
     1859                ENDIF 
    19681860 
    19691861# endif 
    19701862 
    1971                if ( jk .eq. 1 ) then 
    1972                   !!---------------------------------------------------------------------- 
    1973                   !! River inputs 
    1974                   !!---------------------------------------------------------------------- 
    1975                   !! 
    1976                   !! runoff comes in as        kg / m2 / s 
    1977                   !! used and written out as   m3 / m2 / d (= m / d) 
    1978                   !! where                     1000 kg / m2 / d = 1 m3 / m2 / d = 1 m / d 
    1979                   !! 
    1980                   !! AXY (17/07/14): the compiler doesn't like this line for some reason; 
    1981                   !!                 as MEDUSA doesn't even use runoff for riverine inputs, 
    1982                   !!                 a temporary solution is to switch off runoff entirely 
    1983                   !!                 here; again, this change is one of several that will  
    1984                   !!                 need revisiting once MEDUSA has bedded down in UKESM1; 
    1985                   !!                 particularly so if the land scheme provides information 
    1986                   !!                 concerning nutrient fluxes 
    1987                   !! 
    1988                   !! f_runoff(ji,jj) = sf_rnf(1)%fnow(ji,jj,1) / 1000. * 60. * 60. * 24. 
    1989                   f_runoff(ji,jj) = 0.0 
    1990                   !! 
    1991                   !! nutrients are added via rivers to the model in one of two ways: 
    1992                   !!   1. via river concentration; i.e. the average nutrient concentration 
    1993                   !!      of a river water is described by a spatial file, and this is 
    1994                   !!      multiplied by runoff to give a nutrient flux 
    1995                   !!   2. via direct river flux; i.e. the average nutrient flux due to 
    1996                   !!      rivers is described by a spatial file, and this is simply applied 
    1997                   !!      as a direct nutrient flux (i.e. it does not relate or respond to 
    1998                   !!      model runoff) 
    1999                   !! nutrient fields are derived from the GlobalNEWS 2 database; carbon and 
    2000                   !! alkalinity are derived from continent-scale DIC estimates (Huang et al.,  
    2001                   !! 2012) and some Arctic river alkalinity estimates (Katya?) 
    2002                   !!  
    2003                   !! as of 19/07/12, riverine nutrients can now be spread vertically across  
    2004                   !! several grid cells rather than just poured into the surface box; this 
    2005                   !! block of code is still executed, however, to set up the total amounts 
    2006                   !! of nutrient entering via rivers 
    2007                   !! 
    2008                   !! nitrogen 
    2009                   if (jriver_n .eq. 1) then 
    2010                      !! river concentration specified; use runoff to calculate input 
    2011                      f_riv_n(ji,jj) = f_runoff(ji,jj) * riv_n(ji,jj) 
    2012                   elseif (jriver_n .eq. 2) then 
    2013                      !! river flux specified; independent of runoff 
    2014                      f_riv_n(ji,jj) = riv_n(ji,jj) 
    2015                   endif 
    2016                   !! 
    2017                   !! silicon 
    2018                   if (jriver_si .eq. 1) then 
    2019                      !! river concentration specified; use runoff to calculate input 
    2020                      f_riv_si(ji,jj) = f_runoff(ji,jj) * riv_si(ji,jj) 
    2021                   elseif (jriver_si .eq. 2) then 
    2022                      !! river flux specified; independent of runoff 
    2023                      f_riv_si(ji,jj) = riv_si(ji,jj) 
    2024                   endif 
    2025                   !! 
    2026                   !! carbon 
    2027                   if (jriver_c .eq. 1) then 
    2028                      !! river concentration specified; use runoff to calculate input 
    2029                      f_riv_c(ji,jj) = f_runoff(ji,jj) * riv_c(ji,jj) 
    2030                   elseif (jriver_c .eq. 2) then 
    2031                      !! river flux specified; independent of runoff 
    2032                      f_riv_c(ji,jj) = riv_c(ji,jj) 
    2033                   endif 
    2034                   !! 
    2035                   !! alkalinity 
    2036                   if (jriver_alk .eq. 1) then 
    2037                      !! river concentration specified; use runoff to calculate input 
    2038                      f_riv_alk(ji,jj) = f_runoff(ji,jj) * riv_alk(ji,jj) 
    2039                   elseif (jriver_alk .eq. 2) then 
    2040                      !! river flux specified; independent of runoff 
    2041                      f_riv_alk(ji,jj) = riv_alk(ji,jj) 
    2042                   endif 
    2043  
    2044                endif 
    2045  
    2046                !!---------------------------------------------------------------------- 
    2047                !! Chlorophyll calculations 
    2048                !!---------------------------------------------------------------------- 
    2049                !! 
    2050                !! non-diatoms 
    2051           if (zphn.GT.rsmall) then 
    2052                   fthetan = max(tiny(zchn), (zchn * xxi) / (zphn + tiny(zphn))) 
    2053                   faln    = xaln * fthetan 
    2054                else 
    2055                   fthetan = 0. 
    2056                   faln    = 0. 
    2057                endif 
    2058                !! 
    2059                !! diatoms 
    2060           if (zphd.GT.rsmall) then 
    2061                   fthetad = max(tiny(zchd), (zchd * xxi) / (zphd + tiny(zphd))) 
    2062                   fald    = xald * fthetad 
    2063                else 
    2064                   fthetad = 0. 
    2065                   fald    = 0. 
    2066                endif 
     1863                !!====================================================================== 
     1864                !! AXY (07/04/17): possible subroutine block; riverine inputs (or delete; it's unused presently) 
     1865                !!====================================================================== 
     1866                if ( jk .eq. 1 ) then 
     1867                   !!---------------------------------------------------------------------- 
     1868                   !! River inputs 
     1869                   !!---------------------------------------------------------------------- 
     1870                   !! 
     1871                   !! runoff comes in as        kg / m2 / s 
     1872                   !! used and written out as   m3 / m2 / d (= m / d) 
     1873                   !! where                     1000 kg / m2 / d = 1 m3 / m2 / d = 1 m / d 
     1874                   !! 
     1875                   !! AXY (17/07/14): the compiler doesn't like this line for some reason; 
     1876                   !!                 as MEDUSA doesn't even use runoff for riverine inputs, 
     1877                   !!                 a temporary solution is to switch off runoff entirely 
     1878                   !!                 here; again, this change is one of several that will  
     1879                   !!                 need revisiting once MEDUSA has bedded down in UKESM1; 
     1880                   !!                 particularly so if the land scheme provides information 
     1881                   !!                 concerning nutrient fluxes 
     1882                   !! 
     1883                   !! f_runoff(ji,jj) = sf_rnf(1)%fnow(ji,jj,1) / 1000. * 60. * 60. * 24. 
     1884                   f_runoff(ji,jj) = 0.0 
     1885                   !! 
     1886                   !! nutrients are added via rivers to the model in one of two ways: 
     1887                   !!   1. via river concentration; i.e. the average nutrient concentration 
     1888                   !!      of a river water is described by a spatial file, and this is 
     1889                   !!      multiplied by runoff to give a nutrient flux 
     1890                   !!   2. via direct river flux; i.e. the average nutrient flux due to 
     1891                   !!      rivers is described by a spatial file, and this is simply applied 
     1892                   !!      as a direct nutrient flux (i.e. it does not relate or respond to 
     1893                   !!      model runoff) 
     1894                   !! nutrient fields are derived from the GlobalNEWS 2 database; carbon and 
     1895                   !! alkalinity are derived from continent-scale DIC estimates (Huang et al.,  
     1896                   !! 2012) and some Arctic river alkalinity estimates (Katya?) 
     1897                   !!  
     1898                   !! as of 19/07/12, riverine nutrients can now be spread vertically across  
     1899                   !! several grid cells rather than just poured into the surface box; this 
     1900                   !! block of code is still executed, however, to set up the total amounts 
     1901                   !! of nutrient entering via rivers 
     1902                   !! 
     1903                   !! nitrogen 
     1904                   if (jriver_n .eq. 1) then 
     1905                      !! river concentration specified; use runoff to calculate input 
     1906                      f_riv_n(ji,jj) = f_runoff(ji,jj) * riv_n(ji,jj) 
     1907                   elseif (jriver_n .eq. 2) then 
     1908                      !! river flux specified; independent of runoff 
     1909                      f_riv_n(ji,jj) = riv_n(ji,jj) 
     1910                   endif 
     1911                   !! 
     1912                   !! silicon 
     1913                   if (jriver_si .eq. 1) then 
     1914                      !! river concentration specified; use runoff to calculate input 
     1915                      f_riv_si(ji,jj) = f_runoff(ji,jj) * riv_si(ji,jj) 
     1916                   elseif (jriver_si .eq. 2) then 
     1917                      !! river flux specified; independent of runoff 
     1918                      f_riv_si(ji,jj) = riv_si(ji,jj) 
     1919                   endif 
     1920                   !! 
     1921                   !! carbon 
     1922                   if (jriver_c .eq. 1) then 
     1923                      !! river concentration specified; use runoff to calculate input 
     1924                      f_riv_c(ji,jj) = f_runoff(ji,jj) * riv_c(ji,jj) 
     1925                   elseif (jriver_c .eq. 2) then 
     1926                      !! river flux specified; independent of runoff 
     1927                      f_riv_c(ji,jj) = riv_c(ji,jj) 
     1928                   endif 
     1929                   !! 
     1930                   !! alkalinity 
     1931                   if (jriver_alk .eq. 1) then 
     1932                      !! river concentration specified; use runoff to calculate input 
     1933                      f_riv_alk(ji,jj) = f_runoff(ji,jj) * riv_alk(ji,jj) 
     1934                   elseif (jriver_alk .eq. 2) then 
     1935                      !! river flux specified; independent of runoff 
     1936                      f_riv_alk(ji,jj) = riv_alk(ji,jj) 
     1937                   endif 
     1938 
     1939                endif 
     1940 
     1941                !!====================================================================== 
     1942                !! AXY (07/04/17): possible subroutine block; phytoplankton growth 
     1943                !!====================================================================== 
     1944 
     1945                !!---------------------------------------------------------------------- 
     1946                !! Chlorophyll calculations 
     1947                !!---------------------------------------------------------------------- 
     1948                !! 
     1949                !! non-diatoms 
     1950                if (zphn.GT.rsmall) then 
     1951                   fthetan = max(tiny(zchn), (zchn * xxi) / (zphn + tiny(zphn))) 
     1952                   faln    = xaln * fthetan 
     1953                else 
     1954                   fthetan = 0. 
     1955                   faln    = 0. 
     1956                endif 
     1957                !! 
     1958                !! diatoms 
     1959                if (zphd.GT.rsmall) then 
     1960                   fthetad = max(tiny(zchd), (zchd * xxi) / (zphd + tiny(zphd))) 
     1961                   fald    = xald * fthetad 
     1962                else 
     1963                   fthetad = 0. 
     1964                   fald    = 0. 
     1965                endif 
     1966 
     1967                !!---------------------------------------------------------------------- 
     1968                !! Phytoplankton light limitation 
     1969                !!---------------------------------------------------------------------- 
     1970                !! 
     1971                !! It is assumed xpar is the depth-averaged (vertical layer) PAR  
     1972                !! Light limitation (check self-shading) in W/m2 
     1973                !! 
     1974                !! Note that there is no temperature dependence in phytoplankton 
     1975                !! growth rate or any other function.  
     1976                !! In calculation of Chl/Phy ratio tiny(phyto) is introduced to avoid 
     1977                !! NaNs in case of Phy==0.   
     1978                !! 
     1979                !! fthetad and fthetan are Chl:C ratio (gChl/gC) in diat and non-diat:  
     1980                !! for 1:1 Chl:P ratio (mgChl/mmolN) theta=0.012 
     1981                !! 
     1982                !! AXY (16/07/09) 
     1983                !! temperature for new Eppley style phytoplankton growth 
     1984                loc_T   = tsn(ji,jj,jk,jp_tem) 
     1985                fun_T   = 1.066**(1.0 * loc_T) 
     1986                !! AXY (16/05/11): add in new Q10 (1.5, not 2.0) for 
     1987                !phytoplankton 
     1988                !!                 growth; remin. unaffected 
     1989                fun_Q10 = xq10**((loc_T - 0.0) / 10.0) 
     1990                if (jphy.eq.1) then 
     1991                   xvpnT = xvpn * fun_T 
     1992                   xvpdT = xvpd * fun_T 
     1993                elseif (jphy.eq.2) then 
     1994                   xvpnT = xvpn * fun_Q10 
     1995                   xvpdT = xvpd * fun_Q10 
     1996                else 
     1997                   xvpnT = xvpn 
     1998                   xvpdT = xvpd 
     1999                endif 
     2000                !! 
     2001                !! non-diatoms 
     2002                fchn1   = (xvpnT * xvpnT) + (faln * faln * xpar(ji,jj,jk) * xpar(ji,jj,jk)) 
     2003                if (fchn1.GT.rsmall) then 
     2004                   fchn    = xvpnT / (sqrt(fchn1) + tiny(fchn1)) 
     2005                else 
     2006                   fchn    = 0. 
     2007                endif 
     2008                fjln    = fchn * faln * xpar(ji,jj,jk) !! non-diatom J term 
     2009                fjlim_pn = fjln / xvpnT 
     2010                !! 
     2011                !! diatoms 
     2012                fchd1   = (xvpdT * xvpdT) + (fald * fald * xpar(ji,jj,jk) * xpar(ji,jj,jk)) 
     2013                if (fchd1.GT.rsmall) then 
     2014                   fchd    = xvpdT / (sqrt(fchd1) + tiny(fchd1)) 
     2015                else 
     2016                   fchd    = 0. 
     2017                endif 
     2018                fjld    = fchd * fald * xpar(ji,jj,jk) !! diatom J term 
     2019                fjlim_pd = fjld / xvpdT 
     2020 
     2021                !!---------------------------------------------------------------------- 
     2022                !! Phytoplankton nutrient limitation 
     2023                !!---------------------------------------------------------------------- 
     2024                !! 
     2025                !! non-diatoms (N, Fe) 
     2026                fnln = zdin / (zdin + xnln) !! non-diatom Qn term 
     2027                ffln = zfer / (zfer + xfln) !! non-diatom Qf term 
     2028                !! 
     2029                !! diatoms (N, Si, Fe) 
     2030                fnld = zdin / (zdin + xnld) !! diatom Qn term 
     2031                fsld = zsil / (zsil + xsld) !! diatom Qs term 
     2032                ffld = zfer / (zfer + xfld) !! diatom Qf term 
     2033 
     2034                !!---------------------------------------------------------------------- 
     2035                !! Primary production (non-diatoms) 
     2036                !! (note: still needs multiplying by phytoplankton concentration) 
     2037                !!---------------------------------------------------------------------- 
     2038                !! 
     2039                if (jliebig .eq. 0) then 
     2040                   !! multiplicative nutrient limitation 
     2041                   fpnlim = fnln * ffln 
     2042                elseif (jliebig .eq. 1) then 
     2043                   !! Liebig Law (= most limiting) nutrient limitation 
     2044                   fpnlim = min(fnln, ffln) 
     2045                endif 
     2046                fprn = fjln * fpnlim 
     2047 
     2048                !!---------------------------------------------------------------------- 
     2049                !! Primary production (diatoms) 
     2050                !! (note: still needs multiplying by phytoplankton concentration) 
     2051                !! 
     2052                !! production here is split between nitrogen production and that of 
     2053                !! silicon; depending upon the "intracellular" ratio of Si:N, model 
     2054                !! diatoms will uptake nitrogen/silicon differentially; this borrows 
     2055                !! from the diatom model of Mongin et al. (2006) 
     2056                !!---------------------------------------------------------------------- 
     2057                !! 
     2058                if (jliebig .eq. 0) then 
     2059                   !! multiplicative nutrient limitation 
     2060                   fpdlim = fnld * ffld 
     2061                elseif (jliebig .eq. 1) then 
     2062                   !! Liebig Law (= most limiting) nutrient limitation 
     2063                   fpdlim = min(fnld, ffld) 
     2064                endif 
     2065                !! 
     2066                if (zphd.GT.rsmall .AND. zpds.GT.rsmall) then 
     2067                   !! "intracellular" elemental ratios 
     2068                   ! fsin  = zpds / (zphd + tiny(zphd)) 
     2069                   ! fnsi  = zphd / (zpds + tiny(zpds)) 
     2070                   fsin = 0.0 
     2071                   IF( zphd .GT. rsmall) fsin  = zpds / zphd 
     2072                   fnsi = 0.0 
     2073                   IF( zpds .GT. rsmall) fnsi  = zphd / zpds 
     2074                   !! AXY (23/02/10): these next variables derive from Mongin et al. (2003) 
     2075                   fsin1 = 3.0 * xsin0 !! = 0.6 
     2076                   fnsi1 = 1.0 / fsin1 !! = 1.667 
     2077                   fnsi2 = 1.0 / xsin0 !! = 5.0 
     2078                   !! 
     2079                   !! conditionalities based on ratios 
     2080                   !! nitrogen (and iron and carbon) 
     2081                   if (fsin.le.xsin0) then 
     2082                      fprd  = 0.0 
     2083                      fsld2 = 0.0 
     2084                   elseif (fsin.lt.fsin1) then 
     2085                      fprd  = xuif * ((fsin - xsin0) / (fsin + tiny(fsin))) * (fjld * fpdlim) 
     2086                      fsld2 = xuif * ((fsin - xsin0) / (fsin + tiny(fsin))) 
     2087                   elseif (fsin.ge.fsin1) then 
     2088                      fprd  = (fjld * fpdlim) 
     2089                      fsld2 = 1.0 
     2090                   endif 
     2091                   !! 
     2092                   !! silicon 
     2093                   if (fsin.lt.fnsi1) then 
     2094                      fprds = (fjld * fsld) 
     2095                   elseif (fsin.lt.fnsi2) then 
     2096                      fprds = xuif * ((fnsi - xnsi0) / (fnsi + tiny(fnsi))) * (fjld * fsld) 
     2097                   else 
     2098                      fprds = 0.0 
     2099                   endif 
     2100                else 
     2101                   fsin  = 0.0 
     2102                   fnsi  = 0.0 
     2103                   fprd  = 0.0 
     2104                   fsld2 = 0.0 
     2105                   fprds = 0.0 
     2106                endif 
     2107 
     2108                !!---------------------------------------------------------------------- 
     2109                !! Mixed layer primary production 
     2110                !! this block calculates the amount of primary production that occurs 
     2111                !! within the upper mixed layer; this allows the separate diagnosis 
     2112                !! of "sub-surface" primary production; it does assume that short- 
     2113                !! term variability in mixed layer depth doesn't mess with things 
     2114                !! though 
     2115                !!---------------------------------------------------------------------- 
     2116                !! 
     2117                if (fdep1.le.hmld(ji,jj)) then 
     2118                   !! this level is entirely in the mixed layer 
     2119                   fq0 = 1.0 
     2120                elseif (fdep.ge.hmld(ji,jj)) then 
     2121                   !! this level is entirely below the mixed layer 
     2122                   fq0 = 0.0 
     2123                else 
     2124                   !! this level straddles the mixed layer 
     2125                   fq0 = (hmld(ji,jj) - fdep) / fthk 
     2126                endif 
     2127                !! 
     2128                fprn_ml(ji,jj) = fprn_ml(ji,jj) + (fprn * zphn * fthk * fq0) 
     2129                fprd_ml(ji,jj) = fprd_ml(ji,jj) + (fprd * zphd * fthk * fq0) 
     2130 
     2131                !!---------------------------------------------------------------------- 
     2132                !! Vertical Integral -- 
     2133                !!---------------------------------------------------------------------- 
     2134                ftot_pn(ji,jj)  = ftot_pn(ji,jj)  + (zphn * fthk)   !! vertical integral non-diatom phytoplankton 
     2135                ftot_pd(ji,jj)  = ftot_pd(ji,jj)  + (zphd * fthk)   !! vertical integral diatom phytoplankton 
     2136                ftot_zmi(ji,jj) = ftot_zmi(ji,jj) + (zzmi * fthk)   !! vertical integral microzooplankton 
     2137                ftot_zme(ji,jj) = ftot_zme(ji,jj) + (zzme * fthk)   !! vertical integral mesozooplankton 
     2138                ftot_det(ji,jj) = ftot_det(ji,jj) + (zdet * fthk)   !! vertical integral slow detritus, nitrogen 
     2139                ftot_dtc(ji,jj) = ftot_dtc(ji,jj) + (zdtc * fthk)   !! vertical integral slow detritus, carbon 
     2140 
     2141                !!---------------------------------------------------------------------- 
     2142                !! More chlorophyll calculations 
     2143                !!---------------------------------------------------------------------- 
     2144                !! 
     2145                !! frn = (xthetam / fthetan) * (fprn / (fthetan * xpar(ji,jj,jk))) 
     2146                !! frd = (xthetam / fthetad) * (fprd / (fthetad * xpar(ji,jj,jk))) 
     2147                frn = (xthetam * fchn * fnln * ffln       ) / (fthetan + tiny(fthetan)) 
     2148                !! AXY (12/05/09): there's potentially a problem here; fsld, silicic acid  
     2149                !!   limitation, is used in the following line to regulate chlorophyll  
     2150                !!   growth in a manner that is inconsistent with its use in the regulation  
     2151                !!   of biomass growth; the Mongin term term used in growth is more complex 
     2152                !!   than the simple multiplicative function used below 
     2153                !! frd = (xthetam * fchd * fnld * ffld * fsld) / (fthetad + tiny(fthetad)) 
     2154                !! AXY (12/05/09): this replacement line uses the new variable, fsld2, to 
     2155                !!   regulate chlorophyll growth 
     2156                frd = (xthetamd * fchd * fnld * ffld * fsld2) / (fthetad + tiny(fthetad)) 
     2157 
     2158                !!====================================================================== 
     2159                !! AXY (07/04/17): possible subroutine block; zooplankton grazing 
     2160                !!====================================================================== 
     2161 
     2162                !!---------------------------------------------------------------------- 
     2163                !! Zooplankton Grazing  
     2164                !! this code supplements the base grazing model with one that 
     2165                !! considers the C:N ratio of grazed food and balances this against 
     2166                !! the requirements of zooplankton growth; this model is derived  
     2167                !! from that of Anderson & Pondaven (2003) 
     2168                !! 
     2169                !! the current version of the code assumes a fixed C:N ratio for 
     2170                !! detritus (in contrast to Anderson & Pondaven, 2003), though the 
     2171                !! full equations are retained for future extension 
     2172                !!---------------------------------------------------------------------- 
     2173                !! 
     2174                !!---------------------------------------------------------------------- 
     2175                !! Microzooplankton first 
     2176                !!---------------------------------------------------------------------- 
     2177                !! 
     2178                fmi1    = (xkmi * xkmi) + (xpmipn * zphn * zphn) + (xpmid * zdet * zdet) 
     2179                fmi     = xgmi * zzmi / fmi1 
     2180                fgmipn  = fmi * xpmipn * zphn * zphn   !! grazing on non-diatoms 
     2181                fgmid   = fmi * xpmid  * zdet * zdet   !! grazing on detrital nitrogen 
     2182# if defined key_roam 
     2183                fgmidc  = rsmall !acc 
     2184                IF ( zdet .GT. rsmall ) fgmidc  = (zdtc / (zdet + tiny(zdet))) * fgmid  !! grazing on detrital carbon 
     2185# else 
     2186                !! AXY (26/11/08): implicit detrital carbon change 
     2187                fgmidc  = xthetad * fgmid              !! grazing on detrital carbon 
     2188# endif 
     2189                !! 
     2190                !! which translates to these incoming N and C fluxes 
     2191                finmi   = (1.0 - xphi) * (fgmipn + fgmid) 
     2192                ficmi   = (1.0 - xphi) * ((xthetapn * fgmipn) + fgmidc) 
     2193                !! 
     2194                !! the ideal food C:N ratio for microzooplankton 
     2195                !! xbetan = 0.77; xthetaz = 5.625; xbetac = 0.64; xkc = 0.80 
     2196                fstarmi = (xbetan * xthetazmi) / (xbetac * xkc) 
     2197                !! 
     2198                !! process these to determine proportioning of grazed N and C 
     2199                !! (since there is no explicit consideration of respiration, 
     2200                !! only growth and excretion are calculated here) 
     2201                fmith   = (ficmi / (finmi + tiny(finmi))) 
     2202                if (fmith.ge.fstarmi) then 
     2203                   fmigrow = xbetan * finmi 
     2204                   fmiexcr = 0.0 
     2205                else 
     2206                   fmigrow = (xbetac * xkc * ficmi) / xthetazmi 
     2207                   fmiexcr = ficmi * ((xbetan / (fmith + tiny(fmith))) - ((xbetac * xkc) / xthetazmi)) 
     2208                endif 
     2209# if defined key_roam 
     2210                fmiresp = (xbetac * ficmi) - (xthetazmi * fmigrow) 
     2211# endif 
     2212 
     2213                !!---------------------------------------------------------------------- 
     2214                !! Mesozooplankton second 
     2215                !!---------------------------------------------------------------------- 
     2216                !! 
     2217                fme1    = (xkme * xkme) + (xpmepn * zphn * zphn) + (xpmepd * zphd * zphd) + &  
     2218                     (xpmezmi * zzmi * zzmi) + (xpmed * zdet * zdet) 
     2219                fme     = xgme * zzme / fme1 
     2220                fgmepn  = fme * xpmepn  * zphn * zphn  !! grazing on non-diatoms 
     2221                fgmepd  = fme * xpmepd  * zphd * zphd  !! grazing on diatoms 
     2222                fgmepds = fsin * fgmepd                !! grazing on diatom silicon 
     2223                fgmezmi = fme * xpmezmi * zzmi * zzmi  !! grazing on microzooplankton 
     2224                fgmed   = fme * xpmed   * zdet * zdet  !! grazing on detrital nitrogen 
     2225# if defined key_roam 
     2226                fgmedc  = rsmall !acc 
     2227                IF ( zdet .GT. rsmall ) fgmedc  = (zdtc / (zdet + tiny(zdet))) * fgmed  !! grazing on detrital carbon 
     2228# else 
     2229                !! AXY (26/11/08): implicit detrital carbon change 
     2230                fgmedc  = xthetad * fgmed              !! grazing on detrital carbon 
     2231# endif 
     2232                !! 
     2233                !! which translates to these incoming N and C fluxes 
     2234                finme   = (1.0 - xphi) * (fgmepn + fgmepd + fgmezmi + fgmed) 
     2235                ficme   = (1.0 - xphi) * ((xthetapn * fgmepn) + (xthetapd * fgmepd) + & 
     2236                     (xthetazmi * fgmezmi) + fgmedc) 
     2237                !! 
     2238                !! the ideal food C:N ratio for mesozooplankton 
     2239                !! xbetan = 0.77; xthetaz = 5.625; xbetac = 0.64; xkc = 0.80 
     2240                fstarme = (xbetan * xthetazme) / (xbetac * xkc) 
     2241                !! 
     2242                !! process these to determine proportioning of grazed N and C 
     2243                !! (since there is no explicit consideration of respiration, 
     2244                !! only growth and excretion are calculated here) 
     2245                fmeth   = (ficme / (finme + tiny(finme))) 
     2246                if (fmeth.ge.fstarme) then 
     2247                   fmegrow = xbetan * finme 
     2248                   fmeexcr = 0.0 
     2249                else 
     2250                   fmegrow = (xbetac * xkc * ficme) / xthetazme 
     2251                   fmeexcr = ficme * ((xbetan / (fmeth + tiny(fmeth))) - ((xbetac * xkc) / xthetazme)) 
     2252                endif 
     2253# if defined key_roam 
     2254                fmeresp = (xbetac * ficme) - (xthetazme * fmegrow) 
     2255# endif 
     2256 
     2257                fzmi_i(ji,jj)  = fzmi_i(ji,jj)  + fthk * (  & 
     2258                     fgmipn + fgmid ) 
     2259                fzmi_o(ji,jj)  = fzmi_o(ji,jj)  + fthk * (  & 
     2260                     fmigrow + (xphi * (fgmipn + fgmid)) + fmiexcr + ((1.0 - xbetan) * finmi) ) 
     2261                fzme_i(ji,jj)  = fzme_i(ji,jj)  + fthk * (  & 
     2262                     fgmepn + fgmepd + fgmezmi + fgmed ) 
     2263                fzme_o(ji,jj)  = fzme_o(ji,jj)  + fthk * (  & 
     2264                     fmegrow + (xphi * (fgmepn + fgmepd + fgmezmi + fgmed)) + fmeexcr + ((1.0 - xbetan) * finme) ) 
     2265 
     2266                !!====================================================================== 
     2267                !! AXY (07/04/17): possible subroutine block; miscellaneous plankton losses 
     2268                !!====================================================================== 
     2269 
     2270                !!---------------------------------------------------------------------- 
     2271                !! Plankton metabolic losses 
     2272                !! Linear loss processes assumed to be metabolic in origin 
     2273                !!---------------------------------------------------------------------- 
     2274                !! 
     2275                fdpn2  = xmetapn  * zphn 
     2276                fdpd2  = xmetapd  * zphd 
     2277                fdpds2 = xmetapd  * zpds 
     2278                fdzmi2 = xmetazmi * zzmi 
     2279                fdzme2 = xmetazme * zzme 
     2280 
     2281                !!---------------------------------------------------------------------- 
     2282                !! Plankton mortality losses 
     2283                !! EKP (26/02/09): phytoplankton hyperbolic mortality term introduced  
     2284                !! to improve performance in gyres 
     2285                !!---------------------------------------------------------------------- 
     2286                !! 
     2287                !! non-diatom phytoplankton 
     2288                if (jmpn.eq.1) fdpn = xmpn * zphn               !! linear 
     2289                if (jmpn.eq.2) fdpn = xmpn * zphn * zphn        !! quadratic 
     2290                if (jmpn.eq.3) fdpn = xmpn * zphn * &           !! hyperbolic 
     2291                     (zphn / (xkphn + zphn)) 
     2292                if (jmpn.eq.4) fdpn = xmpn * zphn * &           !! sigmoid 
     2293                     ((zphn * zphn) / (xkphn + (zphn * zphn))) 
     2294                !! 
     2295                !! diatom phytoplankton 
     2296                if (jmpd.eq.1) fdpd = xmpd * zphd               !! linear 
     2297                if (jmpd.eq.2) fdpd = xmpd * zphd * zphd        !! quadratic 
     2298                if (jmpd.eq.3) fdpd = xmpd * zphd * &           !! hyperbolic 
     2299                     (zphd / (xkphd + zphd)) 
     2300                if (jmpd.eq.4) fdpd = xmpd * zphd * &           !! sigmoid 
     2301                     ((zphd * zphd) / (xkphd + (zphd * zphd))) 
     2302                fdpds = fdpd * fsin 
     2303                !! 
     2304                !! microzooplankton 
     2305                if (jmzmi.eq.1) fdzmi = xmzmi * zzmi            !! linear 
     2306                if (jmzmi.eq.2) fdzmi = xmzmi * zzmi * zzmi     !! quadratic 
     2307                if (jmzmi.eq.3) fdzmi = xmzmi * zzmi * &        !! hyperbolic 
     2308                     (zzmi / (xkzmi + zzmi)) 
     2309                if (jmzmi.eq.4) fdzmi = xmzmi * zzmi * &        !! sigmoid 
     2310                     ((zzmi * zzmi) / (xkzmi + (zzmi * zzmi))) 
     2311                !! 
     2312                !! mesozooplankton 
     2313                if (jmzme.eq.1) fdzme = xmzme * zzme            !! linear 
     2314                if (jmzme.eq.2) fdzme = xmzme * zzme * zzme     !! quadratic 
     2315                if (jmzme.eq.3) fdzme = xmzme * zzme * &        !! hyperbolic 
     2316                     (zzme / (xkzme + zzme)) 
     2317                if (jmzme.eq.4) fdzme = xmzme * zzme * &        !! sigmoid 
     2318                     ((zzme * zzme) / (xkzme + (zzme * zzme))) 
     2319 
     2320                !!====================================================================== 
     2321                !! AXY (07/04/17): possible subroutine block; detritus processes (fuse with later?) 
     2322                !!====================================================================== 
     2323 
     2324                !!---------------------------------------------------------------------- 
     2325                !! Detritus remineralisation 
     2326                !! Constant or temperature-dependent 
     2327                !!---------------------------------------------------------------------- 
     2328                !! 
     2329                if (jmd.eq.1) then 
     2330                   !! temperature-dependent 
     2331                   fdd  = xmd  * fun_T * zdet 
     2332# if defined key_roam 
     2333                   fddc = xmdc * fun_T * zdtc 
     2334# endif 
     2335                elseif (jmd.eq.2) then 
     2336                   !! AXY (16/05/13): add in Q10-based parameterisation (def in nmlst) 
     2337                   !! temperature-dependent 
     2338                   fdd  = xmd  * fun_Q10 * zdet 
     2339#if defined key_roam 
     2340                   fddc = xmdc * fun_Q10 * zdtc 
     2341#endif 
     2342                else 
     2343                   !! temperature-independent 
     2344                   fdd  = xmd  * zdet 
     2345# if defined key_roam 
     2346                   fddc = xmdc * zdtc 
     2347# endif 
     2348                endif 
     2349                !! 
     2350                !! AXY (22/07/09): accelerate detrital remineralisation in the bottom box 
     2351                if ((jk.eq.jmbathy) .and. jsfd.eq.1) then 
     2352                   fdd  = 1.0  * zdet 
     2353# if defined key_roam 
     2354                   fddc = 1.0  * zdtc 
     2355# endif 
     2356                endif 
     2357 
     2358                !!---------------------------------------------------------------------- 
     2359                !! Detritus addition to benthos 
     2360                !! If activated, slow detritus in the bottom box will enter the 
     2361                !! benthic pool 
     2362                !!---------------------------------------------------------------------- 
     2363                !! 
     2364                if ((jk.eq.jmbathy) .and. jorgben.eq.1) then 
     2365                   !! this is the BOTTOM OCEAN BOX -> into the benthic pool! 
     2366                   !! 
     2367                   f_sbenin_n(ji,jj)  = (zdet * vsed * 86400.) 
     2368                   f_sbenin_fe(ji,jj) = (zdet * vsed * 86400. * xrfn) 
     2369# if defined key_roam 
     2370                   f_sbenin_c(ji,jj)  = (zdtc * vsed * 86400.) 
     2371# else 
     2372                   f_sbenin_c(ji,jj)  = (zdet * vsed * 86400. * xthetad) 
     2373# endif 
     2374                endif 
     2375 
     2376                !!====================================================================== 
     2377                !! AXY (07/04/17): possible subroutine block; iron chemistry and scavenging 
     2378                !!====================================================================== 
     2379 
     2380                !!---------------------------------------------------------------------- 
     2381                !! Iron chemistry and fractionation 
     2382                !! following the Parekh et al. (2004) scheme adopted by the Met. 
     2383                !! Office, Medusa models total iron but considers "free" and 
     2384                !! ligand-bound forms for the purposes of scavenging (only "free" 
     2385                !! iron can be scavenged 
     2386                !!---------------------------------------------------------------------- 
     2387                !! 
     2388                !! total iron concentration (mmol Fe / m3 -> umol Fe / m3) 
     2389                xFeT        = zfer * 1.e3 
     2390                !! 
     2391                !! calculate fractionation (based on Diat-HadOCC; in turn based on Parekh et al., 2004) 
     2392                xb_coef_tmp = xk_FeL * (xLgT - xFeT) - 1.0 
     2393                xb2M4ac     = max(((xb_coef_tmp * xb_coef_tmp) + (4.0 * xk_FeL * xLgT)), 0.0) 
     2394                !! 
     2395                !! "free" ligand concentration 
     2396                xLgF        = 0.5 * (xb_coef_tmp + (xb2M4ac**0.5)) / xk_FeL 
     2397                !! 
     2398                !! ligand-bound iron concentration 
     2399                xFeL        = xLgT - xLgF 
     2400                !! 
     2401                !! "free" iron concentration (and convert to mmol Fe / m3) 
     2402                xFeF        = (xFeT - xFeL) * 1.e-3 
     2403                xFree(ji,jj)= xFeF / (zfer + tiny(zfer)) 
     2404                !! 
     2405                !! scavenging of iron 
     2406                !! AXY (05/04/17): formerly several schemes, now the only appropriate 
     2407                !! one, with all other options returning no scavenging (trc_nam_medusa 
     2408                !! reports on this) 
     2409                !! 
     2410                if (jiron.eq.1) then 
     2411                   !!---------------------------------------------------------------------- 
     2412                   !! Scheme 1: Dutkiewicz et al. (2005) 
     2413                   !! This scheme includes a single scavenging term based solely on a 
     2414                   !! fixed rate and the availablility of "free" iron 
     2415                   !!---------------------------------------------------------------------- 
     2416                   !! 
     2417                   ffescav     = xk_sc_Fe * xFeF                     ! = mmol/m3/d 
     2418                   !! 
     2419                   !!---------------------------------------------------------------------- 
     2420                   !! 
     2421                   !! Mick's code contains a further (optional) implicit "scavenging" of  
     2422                   !! iron that sets an upper bound on "free" iron concentration, and  
     2423                   !! essentially caps the concentration of total iron as xFeL + "free"  
     2424                   !! iron; since the former is constrained by a fixed total ligand  
     2425                   !! concentration (= 1.0 umol/m3), and the latter isn't allowed above  
     2426                   !! this upper bound, total iron is constrained to a maximum of ... 
     2427                   !! 
     2428                   !!    xFeL + min(xFeF, 0.3 umol/m3) = 1.0 + 0.3 = 1.3 umol / m3 
     2429                   !!  
     2430                   !! In Mick's code, the actual value of total iron is reset to this 
     2431                   !! sum (i.e. TFe = FeL + Fe'; but Fe' <= 0.3 umol/m3); this isn't 
     2432                   !! our favoured approach to tracer updating here (not least because 
     2433                   !! of the leapfrog), so here the amount scavenged is augmented by an 
     2434                   !! additional amount that serves to drag total iron back towards that 
     2435                   !! expected from this limitation on iron concentration ... 
     2436                   !! 
     2437                   xmaxFeF     = min((xFeF * 1.e3), 0.3)             ! = umol/m3 
     2438                   !! 
     2439                   !! Here, the difference between current total Fe and (FeL + Fe') is 
     2440                   !! calculated and added to the scavenging flux already calculated 
     2441                   !! above ... 
     2442                   !! 
     2443                   fdeltaFe    = (xFeT - (xFeL + xmaxFeF)) * 1.e-3   ! = mmol/m3 
     2444                   !! 
     2445                   !! This assumes that the "excess" iron is dissipated with a time- 
     2446                   !! scale of 1 day; seems reasonable to me ... (famous last words) 
     2447                   !! 
     2448                   ffescav     = ffescav + fdeltaFe                  ! = mmol/m3/d 
     2449                   !! 
     2450# if defined key_deep_fe_fix 
     2451                   !! AXY (17/01/13) 
     2452                   !! stop scavenging for iron concentrations below 0.5 umol / m3 
     2453                   !! at depths greater than 1000 m; this aims to end MEDUSA's 
     2454                   !! continual loss of iron at depth without impacting things 
     2455                   !! at the surface too much; the justification for this is that 
     2456                   !! it appears to be what Mick Follows et al. do in their work 
     2457                   !! (as evidenced by the iron initial condition they supplied 
     2458                   !! me with); to be honest, it looks like Follow et al. do this 
     2459                   !! at shallower depths than 1000 m, but I'll stick with this 
     2460                   !! for now; I suspect that this seemingly arbitrary approach 
     2461                   !! effectively "parameterises" the particle-based scavenging 
     2462                   !! rates that other models use (i.e. at depth there are no 
     2463                   !! sinking particles, so scavenging stops); it might be fun 
     2464                   !! justifying this in a paper though! 
     2465                   !! 
     2466                   if ((fdep.gt.1000.) .and. (xFeT.lt.0.5)) then 
     2467                      ffescav = 0. 
     2468                   endif 
     2469# endif 
     2470                else 
     2471                   !!---------------------------------------------------------------------- 
     2472                   !! No Scheme: you coward! 
     2473                   !! This scheme puts its head in the sand and eskews any decision about 
     2474                   !! how iron is removed from the ocean; prepare to get deluged in iron 
     2475                   !! you fool! 
     2476                   !!---------------------------------------------------------------------- 
     2477                   ffescav     = 0. 
     2478                endif 
     2479 
     2480                !!---------------------------------------------------------------------- 
     2481                !! Other iron cycle processes 
     2482                !!---------------------------------------------------------------------- 
     2483                !! 
     2484                !! aeolian iron deposition 
     2485                if (jk.eq.1) then 
     2486                   !! zirondep   is in mmol-Fe / m2 / day 
     2487                   !! ffetop     is in mmol-dissolved-Fe / m3 / day 
     2488                   ffetop  = zirondep(ji,jj) * xfe_sol / fthk  
     2489                else 
     2490                   ffetop  = 0.0 
     2491                endif 
     2492                !! 
     2493                !! seafloor iron addition 
     2494                !! AXY (10/07/12): amended to only apply sedimentary flux up to ~500 m down 
     2495                !! if (jk.eq.(mbathy(ji,jj)-1).AND.jk.lt.i1100) then 
     2496                if ((jk.eq.jmbathy).AND.jk.le.i0500) then 
     2497                   !! Moore et al. (2004) cite a coastal California value of 5 umol/m2/d, but adopt a 
     2498                   !! global value of 2 umol/m2/d for all areas < 1100 m; here we use this latter value 
     2499                   !! but apply it everywhere 
     2500                   !! AXY (21/07/09): actually, let's just apply it below 1100 m (levels 1-37) 
     2501                   ffebot  = (xfe_sed / fthk) 
     2502                else 
     2503                   ffebot  = 0.0 
     2504                endif 
     2505 
     2506                !!====================================================================== 
     2507                !! AXY (07/04/17): possible subroutine block; miscellaneous processes (fuse?) 
     2508                !!====================================================================== 
     2509 
     2510                !!---------------------------------------------------------------------- 
     2511                !! Miscellaneous 
     2512                !!---------------------------------------------------------------------- 
     2513                !! 
     2514                !! diatom frustule dissolution 
     2515                fsdiss  = xsdiss * zpds 
     2516 
     2517                !!---------------------------------------------------------------------- 
     2518                !! Slow detritus creation 
     2519                !!---------------------------------------------------------------------- 
     2520                !! this variable integrates the creation of slow sinking detritus 
     2521                !! to allow the split between fast and slow detritus to be  
     2522                !! diagnosed 
     2523                fslown  = fdpn + fdzmi + ((1.0 - xfdfrac1) * fdpd) + & 
     2524                     ((1.0 - xfdfrac2) * fdzme) + ((1.0 - xbetan) * (finmi + finme)) 
     2525                !! 
     2526                !! this variable records the slow detrital sinking flux at this 
     2527                !! particular depth; it is used in the output of this flux at 
     2528                !! standard depths in the diagnostic outputs; needs to be 
     2529                !! adjusted from per second to per day because of parameter vsed 
     2530                fslownflux(ji,jj) = zdet * vsed * 86400. 
     2531# if defined key_roam 
     2532                !! 
     2533                !! and the same for detrital carbon 
     2534                fslowc  = (xthetapn * fdpn) + (xthetazmi * fdzmi) + & 
     2535                     (xthetapd * (1.0 - xfdfrac1) * fdpd) + & 
     2536                     (xthetazme * (1.0 - xfdfrac2) * fdzme) + & 
     2537                     ((1.0 - xbetac) * (ficmi + ficme)) 
     2538                !! 
     2539                !! this variable records the slow detrital sinking flux at this 
     2540                !! particular depth; it is used in the output of this flux at 
     2541                !! standard depths in the diagnostic outputs; needs to be 
     2542                !! adjusted from per second to per day because of parameter vsed 
     2543                fslowcflux(ji,jj) = zdtc * vsed * 86400. 
     2544# endif 
     2545 
     2546                !!---------------------------------------------------------------------- 
     2547                !! Nutrient regeneration 
     2548                !! this variable integrates total nitrogen regeneration down the 
     2549                !! watercolumn; its value is stored and output as a 2D diagnostic; 
     2550                !! the corresponding dissolution flux of silicon (from sources 
     2551                !! other than fast detritus) is also integrated; note that, 
     2552                !! confusingly, the linear loss terms from plankton compartments 
     2553                !! are labelled as fdX2 when one might have expected fdX or fdX1 
     2554                !!---------------------------------------------------------------------- 
     2555                !! 
     2556                !! nitrogen 
     2557                fregen   = (( (xphi * (fgmipn + fgmid)) +                &  ! messy feeding 
     2558                     (xphi * (fgmepn + fgmepd + fgmezmi + fgmed)) +           &  ! messy feeding 
     2559                     fmiexcr + fmeexcr + fdd +                                &  ! excretion + D remin. 
     2560                     fdpn2 + fdpd2 + fdzmi2 + fdzme2) * fthk)                    ! linear mortality 
     2561                !! 
     2562                !! silicon 
     2563                fregensi = (( fsdiss + ((1.0 - xfdfrac1) * fdpds) +      &  ! dissolution + non-lin. mortality 
     2564                     ((1.0 - xfdfrac3) * fgmepds) +                           &  ! egestion by zooplankton 
     2565                     fdpds2) * fthk)                                             ! linear mortality 
     2566# if defined key_roam 
     2567                !! 
     2568                !! carbon 
     2569                fregenc  = (( (xphi * ((xthetapn * fgmipn) + fgmidc)) +  &  ! messy feeding 
     2570                     (xphi * ((xthetapn * fgmepn) + (xthetapd * fgmepd) +     &  ! messy feeding 
     2571                     (xthetazmi * fgmezmi) + fgmedc)) +                       &  ! messy feeding 
     2572                     fmiresp + fmeresp + fddc +                               &  ! respiration + D remin. 
     2573                     (xthetapn * fdpn2) + (xthetapd * fdpd2) +                &  ! linear mortality 
     2574                     (xthetazmi * fdzmi2) + (xthetazme * fdzme2)) * fthk)        ! linear mortality 
     2575# endif 
     2576 
     2577 
     2578                !!====================================================================== 
     2579                !! AXY (07/04/17): possible subroutine block; fast-sinking detritus 
     2580                !!====================================================================== 
     2581 
     2582                !!---------------------------------------------------------------------- 
     2583                !! Fast-sinking detritus terms 
     2584                !! "local" variables declared so that conservation can be checked; 
     2585                !! the calculated terms are added to the fast-sinking flux later on 
     2586                !! only after the flux entering this level has experienced some 
     2587                !! remineralisation 
     2588                !! note: these fluxes need to be scaled by the level thickness 
     2589                !!---------------------------------------------------------------------- 
     2590                !! 
     2591                !! nitrogen:   diatom and mesozooplankton mortality 
     2592                ftempn         = b0 * ((xfdfrac1 * fdpd)  + (xfdfrac2 * fdzme)) 
     2593                !! 
     2594                !! silicon:    diatom mortality and grazed diatoms 
     2595                ftempsi        = b0 * ((xfdfrac1 * fdpds) + (xfdfrac3 * fgmepds)) 
     2596                !! 
     2597                !! iron:       diatom and mesozooplankton mortality 
     2598                ftempfe        = b0 * (((xfdfrac1 * fdpd) + (xfdfrac2 * fdzme)) * xrfn) 
     2599                !! 
     2600                !! carbon:     diatom and mesozooplankton mortality 
     2601                ftempc         = b0 * ((xfdfrac1 * xthetapd * fdpd) + &  
     2602                     (xfdfrac2 * xthetazme * fdzme)) 
     2603                !! 
     2604# if defined key_roam 
     2605                if (jrratio.eq.0) then 
     2606                   !! CaCO3:      latitudinally-based fraction of total primary production 
     2607                   !!               absolute latitude of current grid cell 
     2608                   flat           = abs(gphit(ji,jj)) 
     2609                   !!               0.10 at equator; 0.02 at pole 
     2610                   fcaco3         = xcaco3a + ((xcaco3b - xcaco3a) * ((90.0 - flat) / 90.0)) 
     2611                elseif (jrratio.eq.1) then 
     2612                   !! CaCO3:      Ridgwell et al. (2007) submodel, version 1 
     2613                   !!             this uses SURFACE omega calcite to regulate rain ratio 
     2614                   if (f_omcal(ji,jj).ge.1.0) then 
     2615                      fq1 = (f_omcal(ji,jj) - 1.0)**0.81 
     2616                   else 
     2617                      fq1 = 0. 
     2618                   endif 
     2619                   fcaco3 = xridg_r0 * fq1 
     2620                elseif (jrratio.eq.2) then 
     2621                   !! CaCO3:      Ridgwell et al. (2007) submodel, version 2 
     2622                   !!             this uses FULL 3D omega calcite to regulate rain ratio 
     2623                   if (f3_omcal(ji,jj,jk).ge.1.0) then 
     2624                      fq1 = (f3_omcal(ji,jj,jk) - 1.0)**0.81 
     2625                   else 
     2626                      fq1 = 0. 
     2627                   endif 
     2628                   fcaco3 = xridg_r0 * fq1 
     2629                endif 
     2630# else 
     2631                !! CaCO3:      latitudinally-based fraction of total primary production 
     2632                !!               absolute latitude of current grid cell 
     2633                flat           = abs(gphit(ji,jj)) 
     2634                !!               0.10 at equator; 0.02 at pole 
     2635                fcaco3         = xcaco3a + ((xcaco3b - xcaco3a) * ((90.0 - flat) / 90.0)) 
     2636# endif 
     2637                !! AXY (09/03/09): convert CaCO3 production from function of  
     2638                !! primary production into a function of fast-sinking material;  
     2639                !! technically, this is what Dunne et al. (2007) do anyway; they  
     2640                !! convert total primary production estimated from surface  
     2641                !! chlorophyll to an export flux for which they apply conversion  
     2642                !! factors to estimate the various elemental fractions (Si, Ca) 
     2643                ftempca        = ftempc * fcaco3 
    20672644 
    20682645# if defined key_debug_medusa 
    2069                !! report biological calculations 
    2070                if (idf.eq.1.AND.idfval.eq.1) then 
    2071                   IF (lwp) write (numout,*) '------------------------------' 
    2072                   IF (lwp) write (numout,*) 'faln(',jk,') = ', faln 
    2073                   IF (lwp) write (numout,*) 'fald(',jk,') = ', fald 
    2074                endif 
     2646                !! integrate total fast detritus production 
     2647                if (idf.eq.1) then 
     2648                   fifd_n(ji,jj)  = fifd_n(ji,jj)  + (ftempn  * fthk) 
     2649                   fifd_si(ji,jj) = fifd_si(ji,jj) + (ftempsi * fthk) 
     2650                   fifd_fe(ji,jj) = fifd_fe(ji,jj) + (ftempfe * fthk) 
     2651#  if defined key_roam 
     2652                   fifd_c(ji,jj)  = fifd_c(ji,jj)  + (ftempc  * fthk) 
     2653#  endif 
     2654                endif 
    20752655# endif 
    20762656 
    2077                !!---------------------------------------------------------------------- 
    2078                !! Phytoplankton light limitation 
    2079                !!---------------------------------------------------------------------- 
    2080                !! 
    2081                !! It is assumed xpar is the depth-averaged (vertical layer) PAR  
    2082                !! Light limitation (check self-shading) in W/m2 
    2083                !! 
    2084                !! Note that there is no temperature dependence in phytoplankton 
    2085                !! growth rate or any other function.  
    2086                !! In calculation of Chl/Phy ratio tiny(phyto) is introduced to avoid 
    2087                !! NaNs in case of Phy==0.   
    2088                !! 
    2089                !! fthetad and fthetan are Chl:C ratio (gChl/gC) in diat and non-diat:  
    2090                !! for 1:1 Chl:P ratio (mgChl/mmolN) theta=0.012 
    2091                !! 
    2092                !! AXY (16/07/09) 
    2093                !! temperature for new Eppley style phytoplankton growth 
    2094                loc_T   = tsn(ji,jj,jk,jp_tem) 
    2095                fun_T   = 1.066**(1.0 * loc_T) 
    2096                !! AXY (16/05/11): add in new Q10 (1.5, not 2.0) for 
    2097                !phytoplankton 
    2098                !!                 growth; remin. unaffected 
    2099                fun_Q10 = jq10**((loc_T - 0.0) / 10.0) 
    2100                if (jphy.eq.1) then 
    2101                   xvpnT = xvpn * fun_T 
    2102                   xvpdT = xvpd * fun_T 
    2103                elseif (jphy.eq.2) then 
    2104                   xvpnT = xvpn * fun_Q10 
    2105                   xvpdT = xvpd * fun_Q10 
    2106                else 
    2107                   xvpnT = xvpn 
    2108                   xvpdT = xvpd 
    2109                endif 
    2110                !! 
    2111                !! non-diatoms 
    2112                fchn1   = (xvpnT * xvpnT) + (faln * faln * xpar(ji,jj,jk) * xpar(ji,jj,jk)) 
    2113                if (fchn1.GT.rsmall) then 
    2114                   fchn    = xvpnT / (sqrt(fchn1) + tiny(fchn1)) 
    2115                else 
    2116                   fchn    = 0. 
    2117                endif 
    2118                fjln    = fchn * faln * xpar(ji,jj,jk) !! non-diatom J term 
    2119                fjlim_pn = fjln / xvpnT 
    2120                !! 
    2121                !! diatoms 
    2122                fchd1   = (xvpdT * xvpdT) + (fald * fald * xpar(ji,jj,jk) * xpar(ji,jj,jk)) 
    2123                if (fchd1.GT.rsmall) then 
    2124                   fchd    = xvpdT / (sqrt(fchd1) + tiny(fchd1)) 
    2125                else 
    2126                   fchd    = 0. 
    2127                endif 
    2128                fjld    = fchd * fald * xpar(ji,jj,jk) !! diatom J term 
    2129                fjlim_pd = fjld / xvpdT 
    2130        
     2657                !!---------------------------------------------------------------------- 
     2658                !! This version of MEDUSA offers a choice of three methods for 
     2659                !! handling the remineralisation of fast detritus.  All three 
     2660                !! do so in broadly the same way: 
     2661                !! 
     2662                !!   1.  Fast detritus is stored as a 2D array                   [ ffastX  ] 
     2663                !!   2.  Fast detritus is added level-by-level                   [ ftempX  ] 
     2664                !!   3.  Fast detritus is not remineralised in the top box       [ freminX ] 
     2665                !!   4.  Remaining fast detritus is remineralised in the bottom  [ fsedX   ] 
     2666                !!       box 
     2667                !! 
     2668                !! The three remineralisation methods are: 
     2669                !!    
     2670                !!   1.  Ballast model (i.e. that published in Yool et al., 2011) 
     2671                !!  (1b. Ballast-sans-ballast model) 
     2672                !!   2.  Martin et al. (1987) 
     2673                !!   3.  Henson et al. (2011) 
     2674                !!  
     2675                !! The first of these couples C, N and Fe remineralisation to 
     2676                !! the remineralisation of particulate Si and CaCO3, but the  
     2677                !! latter two treat remineralisation of C, N, Fe, Si and CaCO3 
     2678                !! completely separately.  At present a switch within the code 
     2679                !! regulates which submodel is used, but this should be moved 
     2680                !! to the namelist file. 
     2681                !!  
     2682                !! The ballast-sans-ballast submodel is an original development 
     2683                !! feature of MEDUSA in which the ballast submodel's general 
     2684                !! framework and parameterisation is used, but in which there 
     2685                !! is no protection of organic material afforded by ballasting 
     2686                !! minerals.  While similar, it is not the same as the Martin  
     2687                !! et al. (1987) submodel. 
     2688                !! 
     2689                !! Since the three submodels behave the same in terms of 
     2690                !! accumulating sinking material and remineralising it all at 
     2691                !! the seafloor, these portions of the code below are common to 
     2692                !! all three. 
     2693                !!---------------------------------------------------------------------- 
     2694 
     2695                if (jexport.eq.1) then 
     2696                   !!====================================================================== 
     2697                   !! BALLAST SUBMODEL 
     2698                   !!====================================================================== 
     2699                   !!  
     2700                   !!---------------------------------------------------------------------- 
     2701                   !! Fast-sinking detritus fluxes, pt. 1: REMINERALISATION 
     2702                   !! aside from explicitly modelled, slow-sinking detritus, the 
     2703                   !! model includes an implicit representation of detrital 
     2704                   !! particles that sink too quickly to be modelled with 
     2705                   !! explicit state variables; this sinking flux is instead 
     2706                   !! instantaneously remineralised down the water column using 
     2707                   !! the version of Armstrong et al. (2002)'s ballast model 
     2708                   !! used by Dunne et al. (2007); the version of this model 
     2709                   !! here considers silicon and calcium carbonate ballast 
     2710                   !! minerals; this section of the code redistributes the fast 
     2711                   !! sinking material generated locally down the water column; 
     2712                   !! this differs from Dunne et al. (2007) in that fast sinking 
     2713                   !! material is distributed at *every* level below that it is 
     2714                   !! generated, rather than at every level below some fixed 
     2715                   !! depth; this scheme is also different in that sinking material  
     2716                   !! generated in one level is aggregated with that generated by 
     2717                   !! shallower levels; this should make the ballast model more 
     2718                   !! self-consistent (famous last words) 
     2719                   !!---------------------------------------------------------------------- 
     2720                   !! 
     2721                   if (jk.eq.1) then 
     2722                      !! this is the SURFACE OCEAN BOX (no remineralisation) 
     2723                      !! 
     2724                      freminc  = 0.0 
     2725                      freminn  = 0.0 
     2726                      freminfe = 0.0 
     2727                      freminsi = 0.0 
     2728                      freminca = 0.0 
     2729                   elseif (jk.le.jmbathy) then 
     2730                      !! this is an OCEAN BOX (remineralise some material) 
     2731                      !! 
     2732                      !! set up CCD depth to be used depending on user choice 
     2733                      if (jocalccd.eq.0) then 
     2734                         !! use default CCD field 
     2735                         fccd_dep = ocal_ccd(ji,jj) 
     2736                      elseif (jocalccd.eq.1) then 
     2737                         !! use calculated CCD field 
     2738                         fccd_dep = f2_ccd_cal(ji,jj) 
     2739                      endif 
     2740                      !! 
     2741                      !! === organic carbon === 
     2742                      fq0      = ffastc(ji,jj)                        !! how much organic C enters this box        (mol) 
     2743                      if (iball.eq.1) then 
     2744                         fq1      = (fq0 * xmassc)                    !! how much it weighs                        (mass) 
     2745                         fq2      = (ffastca(ji,jj) * xmassca)        !! how much CaCO3 enters this box            (mass) 
     2746                         fq3      = (ffastsi(ji,jj) * xmasssi)        !! how much  opal enters this box            (mass) 
     2747                         fq4      = (fq2 * xprotca) + (fq3 * xprotsi) !! total protected organic C                 (mass) 
     2748                         !! this next term is calculated for C but used for N and Fe as well 
     2749                         !! it needs to be protected in case ALL C is protected 
     2750                         if (fq4.lt.fq1) then 
     2751                            fprotf   = (fq4 / (fq1 + tiny(fq1)))      !! protected fraction of total organic C     (non-dim) 
     2752                         else 
     2753                            fprotf   = 1.0                            !! all organic C is protected                (non-dim) 
     2754                         endif 
     2755                         fq5      = (1.0 - fprotf)                    !! unprotected fraction of total organic C   (non-dim) 
     2756                         fq6      = (fq0 * fq5)                       !! how much organic C is unprotected         (mol) 
     2757                         fq7      = (fq6 * exp(-(fthk / xfastc)))     !! how much unprotected C leaves this box    (mol) 
     2758                         fq8      = (fq7 + (fq0 * fprotf))            !! how much total C leaves this box          (mol) 
     2759                         freminc  = (fq0 - fq8) / fthk                !! C remineralisation in this box            (mol) 
     2760                         ffastc(ji,jj) = fq8                           
     2761                      else 
     2762                         fq1      = fq0 * exp(-(fthk / xfastc))       !! how much organic C leaves this box        (mol) 
     2763                         freminc  = (fq0 - fq1) / fthk                !! C remineralisation in this box            (mol) 
     2764                         ffastc(ji,jj)  = fq1 
     2765                      endif 
     2766                      !! 
     2767                      !! === organic nitrogen === 
     2768                      fq0      = ffastn(ji,jj)                        !! how much organic N enters this box        (mol) 
     2769                      if (iball.eq.1) then 
     2770                         fq5      = (1.0 - fprotf)                    !! unprotected fraction of total organic N   (non-dim) 
     2771                         fq6      = (fq0 * fq5)                       !! how much organic N is unprotected         (mol) 
     2772                         fq7      = (fq6 * exp(-(fthk / xfastc)))     !! how much unprotected N leaves this box    (mol) 
     2773                         fq8      = (fq7 + (fq0 * fprotf))            !! how much total N leaves this box          (mol) 
     2774                         freminn  = (fq0 - fq8) / fthk                !! N remineralisation in this box            (mol) 
     2775                         ffastn(ji,jj)  = fq8 
     2776                      else 
     2777                         fq1      = fq0 * exp(-(fthk / xfastc))       !! how much organic N leaves this box        (mol) 
     2778                         freminn  = (fq0 - fq1) / fthk                !! N remineralisation in this box            (mol) 
     2779                         ffastn(ji,jj)  = fq1 
     2780                      endif 
     2781                      !! 
     2782                      !! === organic iron === 
     2783                      fq0      = ffastfe(ji,jj)                       !! how much organic Fe enters this box       (mol) 
     2784                      if (iball.eq.1) then 
     2785                         fq5      = (1.0 - fprotf)                    !! unprotected fraction of total organic Fe  (non-dim) 
     2786                         fq6      = (fq0 * fq5)                       !! how much organic Fe is unprotected        (mol) 
     2787                         fq7      = (fq6 * exp(-(fthk / xfastc)))     !! how much unprotected Fe leaves this box   (mol) 
     2788                         fq8      = (fq7 + (fq0 * fprotf))            !! how much total Fe leaves this box         (mol)             
     2789                         freminfe = (fq0 - fq8) / fthk                !! Fe remineralisation in this box           (mol) 
     2790                         ffastfe(ji,jj) = fq8 
     2791                      else 
     2792                         fq1      = fq0 * exp(-(fthk / xfastc))       !! how much total Fe leaves this box         (mol)       
     2793                         freminfe = (fq0 - fq1) / fthk                !! Fe remineralisation in this box           (mol) 
     2794                         ffastfe(ji,jj) = fq1 
     2795                      endif 
     2796                      !! 
     2797                      !! === biogenic silicon === 
     2798                      fq0      = ffastsi(ji,jj)                       !! how much  opal centers this box           (mol)  
     2799                      fq1      = fq0 * exp(-(fthk / xfastsi))         !! how much  opal leaves this box            (mol) 
     2800                      freminsi = (fq0 - fq1) / fthk                   !! Si remineralisation in this box           (mol) 
     2801                      ffastsi(ji,jj) = fq1 
     2802                      !! 
     2803                      !! === biogenic calcium carbonate === 
     2804                      fq0      = ffastca(ji,jj)                       !! how much CaCO3 enters this box            (mol) 
     2805                      if (fdep.le.fccd_dep) then 
     2806                         !! whole grid cell above CCD 
     2807                         fq1      = fq0                               !! above lysocline, no Ca dissolves          (mol) 
     2808                         freminca = 0.0                               !! above lysocline, no Ca dissolves          (mol) 
     2809                         fccd(ji,jj) = real(jk)                       !! which is the last level above the CCD?    (#) 
     2810                      elseif (fdep.ge.fccd_dep) then 
     2811                         !! whole grid cell below CCD 
     2812                         fq1      = fq0 * exp(-(fthk / xfastca))      !! how much CaCO3 leaves this box            (mol) 
     2813                         freminca = (fq0 - fq1) / fthk                !! Ca remineralisation in this box           (mol) 
     2814                      else 
     2815                         !! partial grid cell below CCD 
     2816                         fq2      = fdep1 - fccd_dep                  !! amount of grid cell below CCD             (m) 
     2817                         fq1      = fq0 * exp(-(fq2 / xfastca))       !! how much CaCO3 leaves this box            (mol) 
     2818                         freminca = (fq0 - fq1) / fthk                !! Ca remineralisation in this box           (mol) 
     2819                      endif 
     2820                      ffastca(ji,jj) = fq1  
     2821                   else 
     2822                      !! this is BELOW THE LAST OCEAN BOX (do nothing) 
     2823                      freminc  = 0.0 
     2824                      freminn  = 0.0 
     2825                      freminfe = 0.0 
     2826                      freminsi = 0.0 
     2827                      freminca = 0.0               
     2828                   endif 
     2829 
     2830                elseif (jexport.eq.2.or.jexport.eq.3) then 
     2831                   if (jexport.eq.2) then 
     2832                      !!====================================================================== 
     2833                      !! MARTIN ET AL. (1987) SUBMODEL 
     2834                      !!====================================================================== 
     2835                      !!  
     2836                      !!---------------------------------------------------------------------- 
     2837                      !! This submodel uses the classic Martin et al. (1987) curve 
     2838                      !! to determine the attenuation of fast-sinking detritus down 
     2839                      !! the water column.  All three organic elements, C, N and Fe, 
     2840                      !! are handled identically, and their quantities in sinking 
     2841                      !! particles attenuate according to a power relationship 
     2842                      !! governed by parameter "b".  This is assigned a canonical  
     2843                      !! value of -0.858.  Biogenic opal and calcium carbonate are 
     2844                      !! attentuated using the same function as in the ballast 
     2845                      !! submodel 
     2846                      !!---------------------------------------------------------------------- 
     2847                      !! 
     2848                      fb_val = -0.858 
     2849                   elseif (jexport.eq.3) then 
     2850                      !!====================================================================== 
     2851                      !! HENSON ET AL. (2011) SUBMODEL 
     2852                      !!====================================================================== 
     2853                      !! 
     2854                      !!---------------------------------------------------------------------- 
     2855                      !! This submodel reconfigures the Martin et al. (1987) curve by 
     2856                      !! allowing the "b" value to vary geographically.  Its value is 
     2857                      !! set, following Henson et al. (2011), as a function of local 
     2858                      !! sea surface temperature: 
     2859                      !!   b = -1.06 + (0.024 * SST) 
     2860                      !! This means that remineralisation length scales are longer in 
     2861                      !! warm, tropical areas and shorter in cold, polar areas.  This 
     2862                      !! does seem back-to-front (i.e. one would expect GREATER 
     2863                      !! remineralisation in warmer waters), but is an outcome of  
     2864                      !! analysis of sediment trap data, and it may reflect details 
     2865                      !! of ecosystem structure that pertain to particle production 
     2866                      !! rather than simply Q10. 
     2867                      !!---------------------------------------------------------------------- 
     2868                      !! 
     2869                      fl_sst = tsn(ji,jj,1,jp_tem) 
     2870                      fb_val = -1.06 + (0.024 * fl_sst) 
     2871                   endif 
     2872                   !!    
     2873                   if (jk.eq.1) then 
     2874                      !! this is the SURFACE OCEAN BOX (no remineralisation) 
     2875                      !! 
     2876                      freminc  = 0.0 
     2877                      freminn  = 0.0 
     2878                      freminfe = 0.0 
     2879                      freminsi = 0.0 
     2880                      freminca = 0.0 
     2881                   elseif (jk.le.jmbathy) then 
     2882                      !! this is an OCEAN BOX (remineralise some material) 
     2883                      !! 
     2884                      !! === organic carbon === 
     2885                      fq0      = ffastc(ji,jj)                        !! how much organic C enters this box        (mol) 
     2886                      fq1      = fq0 * ((fdep1/fdep)**fb_val)         !! how much organic C leaves this box        (mol) 
     2887                      freminc  = (fq0 - fq1) / fthk                   !! C remineralisation in this box            (mol) 
     2888                      ffastc(ji,jj)  = fq1 
     2889                      !! 
     2890                      !! === organic nitrogen === 
     2891                      fq0      = ffastn(ji,jj)                        !! how much organic N enters this box        (mol) 
     2892                      fq1      = fq0 * ((fdep1/fdep)**fb_val)         !! how much organic N leaves this box        (mol) 
     2893                      freminn  = (fq0 - fq1) / fthk                   !! N remineralisation in this box            (mol) 
     2894                      ffastn(ji,jj)  = fq1 
     2895                      !! 
     2896                      !! === organic iron === 
     2897                      fq0      = ffastfe(ji,jj)                       !! how much organic Fe enters this box       (mol) 
     2898                      fq1      = fq0 * ((fdep1/fdep)**fb_val)         !! how much organic Fe leaves this box       (mol) 
     2899                      freminfe = (fq0 - fq1) / fthk                   !! Fe remineralisation in this box           (mol) 
     2900                      ffastfe(ji,jj) = fq1 
     2901                      !! 
     2902                      !! === biogenic silicon === 
     2903                      fq0      = ffastsi(ji,jj)                       !! how much  opal centers this box           (mol)  
     2904                      fq1      = fq0 * exp(-(fthk / xfastsi))         !! how much  opal leaves this box            (mol) 
     2905                      freminsi = (fq0 - fq1) / fthk                   !! Si remineralisation in this box           (mol) 
     2906                      ffastsi(ji,jj) = fq1 
     2907                      !! 
     2908                      !! === biogenic calcium carbonate === 
     2909                      fq0      = ffastca(ji,jj)                       !! how much CaCO3 enters this box            (mol) 
     2910                      if (fdep.le.ocal_ccd(ji,jj)) then 
     2911                         !! whole grid cell above CCD 
     2912                         fq1      = fq0                               !! above lysocline, no Ca dissolves          (mol) 
     2913                         freminca = 0.0                               !! above lysocline, no Ca dissolves          (mol) 
     2914                         fccd(ji,jj) = real(jk)                       !! which is the last level above the CCD?    (#) 
     2915                      elseif (fdep.ge.ocal_ccd(ji,jj)) then 
     2916                         !! whole grid cell below CCD 
     2917                         fq1      = fq0 * exp(-(fthk / xfastca))      !! how much CaCO3 leaves this box            (mol) 
     2918                         freminca = (fq0 - fq1) / fthk                !! Ca remineralisation in this box           (mol) 
     2919                      else 
     2920                         !! partial grid cell below CCD 
     2921                         fq2      = fdep1 - ocal_ccd(ji,jj)           !! amount of grid cell below CCD             (m) 
     2922                         fq1      = fq0 * exp(-(fq2 / xfastca))       !! how much CaCO3 leaves this box            (mol) 
     2923                         freminca = (fq0 - fq1) / fthk                !! Ca remineralisation in this box           (mol) 
     2924                      endif 
     2925                      ffastca(ji,jj) = fq1  
     2926                   else 
     2927                      !! this is BELOW THE LAST OCEAN BOX (do nothing) 
     2928                      freminc  = 0.0 
     2929                      freminn  = 0.0 
     2930                      freminfe = 0.0 
     2931                      freminsi = 0.0 
     2932                      freminca = 0.0               
     2933                   endif 
     2934 
     2935                endif 
     2936 
     2937                !!---------------------------------------------------------------------- 
     2938                !! Fast-sinking detritus fluxes, pt. 2: UPDATE FAST FLUXES 
     2939                !! here locally calculated additions to the fast-sinking flux are added 
     2940                !! to the total fast-sinking flux; this is done here such that material 
     2941                !! produced in a particular layer is only remineralised below this 
     2942                !! layer 
     2943                !!---------------------------------------------------------------------- 
     2944                !! 
     2945                !! add sinking material generated in this layer to running totals 
     2946                !! 
     2947                !! === organic carbon ===                          (diatom and mesozooplankton mortality) 
     2948                ffastc(ji,jj)  = ffastc(ji,jj)  + (ftempc  * fthk) 
     2949                !! 
     2950                !! === organic nitrogen ===                        (diatom and mesozooplankton mortality) 
     2951                ffastn(ji,jj)  = ffastn(ji,jj)  + (ftempn  * fthk) 
     2952                !! 
     2953                !! === organic iron ===                            (diatom and mesozooplankton mortality) 
     2954                ffastfe(ji,jj) = ffastfe(ji,jj) + (ftempfe * fthk) 
     2955                !! 
     2956                !! === biogenic silicon ===                        (diatom mortality and grazed diatoms) 
     2957                ffastsi(ji,jj) = ffastsi(ji,jj) + (ftempsi * fthk) 
     2958                !! 
     2959                !! === biogenic calcium carbonate ===              (latitudinally-based fraction of total primary production) 
     2960                ffastca(ji,jj) = ffastca(ji,jj) + (ftempca * fthk) 
     2961 
     2962                !!---------------------------------------------------------------------- 
     2963                !! Fast-sinking detritus fluxes, pt. 3: SEAFLOOR 
     2964                !! remineralise all remaining fast-sinking detritus to dissolved 
     2965                !! nutrients; the sedimentation fluxes calculated here allow the 
     2966                !! separation of what's remineralised sinking through the final 
     2967                !! ocean box from that which is added to the final box by the 
     2968                !! remineralisation of material that reaches the seafloor (i.e. 
     2969                !! the model assumes that *all* material that hits the seafloor 
     2970                !! is remineralised and that none is permanently buried; hey, 
     2971                !! this is a giant GCM model that can't be run for long enough 
     2972                !! to deal with burial fluxes!) 
     2973                !! 
     2974                !! in a change to this process, in part so that MEDUSA behaves 
     2975                !! a little more like ERSEM et al., fast-sinking detritus (N, Fe 
     2976                !! and C) is converted to slow sinking detritus at the seafloor 
     2977                !! instead of being remineralised; the rationale is that in 
     2978                !! shallower shelf regions (... that are not fully mixed!) this 
     2979                !! allows the detrital material to return slowly to dissolved  
     2980                !! nutrient rather than instantaneously as now; the alternative 
     2981                !! would be to explicitly handle seafloor organic material - a 
     2982                !! headache I don't wish to experience at this point; note that 
     2983                !! fast-sinking Si and Ca detritus is just remineralised as  
     2984                !! per usual 
     2985                !!  
     2986                !! AXY (13/01/12) 
     2987                !! in a further change to this process, again so that MEDUSA is 
     2988                !! a little more like ERSEM et al., material that reaches the 
     2989                !! seafloor can now be added to sediment pools and stored for 
     2990                !! slow release; there are new 2D arrays for organic nitrogen, 
     2991                !! iron and carbon and inorganic silicon and carbon that allow 
     2992                !! fast and slow detritus that reaches the seafloor to be held 
     2993                !! and released back to the water column more slowly; these arrays 
     2994                !! are transferred via the tracer restart files between repeat 
     2995                !! submissions of the model 
     2996                !!---------------------------------------------------------------------- 
     2997                !!  
     2998                ffast2slowc  = 0.0 
     2999                ffast2slown  = 0.0 
     3000                ffast2slowfe = 0.0 
     3001                !! 
     3002                if (jk.eq.jmbathy) then 
     3003                   !! this is the BOTTOM OCEAN BOX (remineralise everything) 
     3004                   !! 
     3005                   !! AXY (17/01/12): tweaked to include benthos pools 
     3006                   !!  
     3007                   !! === organic carbon === 
     3008                   if (jfdfate.eq.0 .and. jorgben.eq.0) then 
     3009                      freminc  = freminc + (ffastc(ji,jj) / fthk)    !! C remineralisation in this box            (mol/m3) 
     3010                   elseif (jfdfate.eq.1 .and. jorgben.eq.0) then 
     3011                      ffast2slowc = ffastc(ji,jj) / fthk             !! fast C -> slow C                          (mol/m3) 
     3012                      fslowc      = fslowc + ffast2slowc 
     3013                   elseif (jfdfate.eq.0 .and. jorgben.eq.1) then 
     3014                      f_fbenin_c(ji,jj)  = ffastc(ji,jj)             !! fast C -> benthic C                       (mol/m2) 
     3015                   endif 
     3016                   fsedc(ji,jj)   = ffastc(ji,jj)                          !! record seafloor C                         (mol/m2) 
     3017                   ffastc(ji,jj)  = 0.0 
     3018                   !! 
     3019                   !! === organic nitrogen === 
     3020                   if (jfdfate.eq.0 .and. jorgben.eq.0) then 
     3021                      freminn  = freminn + (ffastn(ji,jj) / fthk)    !! N remineralisation in this box            (mol/m3) 
     3022                   elseif (jfdfate.eq.1 .and. jorgben.eq.0) then 
     3023                      ffast2slown = ffastn(ji,jj) / fthk             !! fast N -> slow N                          (mol/m3) 
     3024                      fslown      = fslown + ffast2slown 
     3025                   elseif (jfdfate.eq.0 .and. jorgben.eq.1) then 
     3026                      f_fbenin_n(ji,jj)  = ffastn(ji,jj)             !! fast N -> benthic N                       (mol/m2) 
     3027                   endif 
     3028                   fsedn(ji,jj)   = ffastn(ji,jj)                          !! record seafloor N                         (mol/m2) 
     3029                   ffastn(ji,jj)  = 0.0 
     3030                   !! 
     3031                   !! === organic iron === 
     3032                   if (jfdfate.eq.0 .and. jorgben.eq.0) then 
     3033                      freminfe = freminfe + (ffastfe(ji,jj) / fthk)  !! Fe remineralisation in this box           (mol/m3) 
     3034                   elseif (jfdfate.eq.1 .and. jorgben.eq.0) then 
     3035                      ffast2slowfe = ffastn(ji,jj) / fthk            !! fast Fe -> slow Fe                        (mol/m3) 
     3036                   elseif (jfdfate.eq.0 .and. jorgben.eq.1) then 
     3037                      f_fbenin_fe(ji,jj) = ffastfe(ji,jj)            !! fast Fe -> benthic Fe                     (mol/m2) 
     3038                   endif 
     3039                   fsedfe(ji,jj)  = ffastfe(ji,jj)                         !! record seafloor Fe                        (mol/m2) 
     3040                   ffastfe(ji,jj) = 0.0 
     3041                   !! 
     3042                   !! === biogenic silicon === 
     3043                   if (jinorgben.eq.0) then 
     3044                      freminsi = freminsi + (ffastsi(ji,jj) / fthk)  !! Si remineralisation in this box           (mol/m3) 
     3045                   elseif (jinorgben.eq.1) then 
     3046                      f_fbenin_si(ji,jj) = ffastsi(ji,jj)            !! fast Si -> benthic Si                     (mol/m2) 
     3047                   endif 
     3048                   fsedsi(ji,jj)   = ffastsi(ji,jj)                         !! record seafloor Si                        (mol/m2) 
     3049                   ffastsi(ji,jj) = 0.0 
     3050                   !! 
     3051                   !! === biogenic calcium carbonate === 
     3052                   if (jinorgben.eq.0) then 
     3053                      freminca = freminca + (ffastca(ji,jj) / fthk)  !! Ca remineralisation in this box           (mol/m3)  
     3054                   elseif (jinorgben.eq.1) then 
     3055                      f_fbenin_ca(ji,jj) = ffastca(ji,jj)            !! fast Ca -> benthic Ca                     (mol/m2) 
     3056                   endif 
     3057                   fsedca(ji,jj)   = ffastca(ji,jj)                         !! record seafloor Ca                        (mol/m2) 
     3058                   ffastca(ji,jj) = 0.0 
     3059                endif 
     3060 
    21313061# if defined key_debug_medusa 
    2132                !! report phytoplankton light limitation 
    2133                if (idf.eq.1.AND.idfval.eq.1) then 
    2134                   IF (lwp) write (numout,*) '------------------------------' 
    2135                   IF (lwp) write (numout,*) 'fchn(',jk,') = ', fchn 
    2136                   IF (lwp) write (numout,*) 'fchd(',jk,') = ', fchd 
    2137                   IF (lwp) write (numout,*) 'fjln(',jk,') = ', fjln 
    2138                   IF (lwp) write (numout,*) 'fjld(',jk,') = ', fjld 
    2139                endif 
     3062                if (idf.eq.1) then 
     3063                   !!---------------------------------------------------------------------- 
     3064                   !! Integrate total fast detritus remineralisation 
     3065                   !!---------------------------------------------------------------------- 
     3066                   !! 
     3067                   fofd_n(ji,jj)  = fofd_n(ji,jj)  + (freminn  * fthk) 
     3068                   fofd_si(ji,jj) = fofd_si(ji,jj) + (freminsi * fthk) 
     3069                   fofd_fe(ji,jj) = fofd_fe(ji,jj) + (freminfe * fthk) 
     3070#  if defined key_roam 
     3071                   fofd_c(ji,jj)  = fofd_c(ji,jj)  + (freminc  * fthk) 
     3072#  endif 
     3073                endif 
    21403074# endif 
    21413075 
    2142                !!---------------------------------------------------------------------- 
    2143                !! Phytoplankton nutrient limitation 
    2144                !!---------------------------------------------------------------------- 
    2145                !! 
    2146                !! non-diatoms (N, Fe) 
    2147                fnln = zdin / (zdin + xnln) !! non-diatom Qn term 
    2148                ffln = zfer / (zfer + xfln) !! non-diatom Qf term 
    2149                !! 
    2150                !! diatoms (N, Si, Fe) 
    2151                fnld = zdin / (zdin + xnld) !! diatom Qn term 
    2152                fsld = zsil / (zsil + xsld) !! diatom Qs term 
    2153                ffld = zfer / (zfer + xfld) !! diatom Qf term 
    2154  
    2155 # if defined key_debug_medusa 
    2156                !! report phytoplankton nutrient limitation 
    2157                if (idf.eq.1.AND.idfval.eq.1) then 
    2158                   IF (lwp) write (numout,*) '------------------------------' 
    2159                   IF (lwp) write (numout,*) 'fnln(',jk,') = ', fnln 
    2160                   IF (lwp) write (numout,*) 'fnld(',jk,') = ', fnld 
    2161                   IF (lwp) write (numout,*) 'ffln(',jk,') = ', ffln 
    2162                   IF (lwp) write (numout,*) 'ffld(',jk,') = ', ffld 
    2163                   IF (lwp) write (numout,*) 'fsld(',jk,') = ', fsld 
    2164                endif 
     3076                !!---------------------------------------------------------------------- 
     3077                !! Sort out remineralisation tally of fast-sinking detritus 
     3078                !!---------------------------------------------------------------------- 
     3079                !! 
     3080                !! update fast-sinking regeneration arrays 
     3081                fregenfast(ji,jj)   = fregenfast(ji,jj)   + (freminn  * fthk) 
     3082                fregenfastsi(ji,jj) = fregenfastsi(ji,jj) + (freminsi * fthk) 
     3083# if defined key_roam 
     3084                fregenfastc(ji,jj)  = fregenfastc(ji,jj)  + (freminc  * fthk) 
    21653085# endif 
    21663086 
    2167                !!---------------------------------------------------------------------- 
    2168                !! Primary production (non-diatoms) 
    2169                !! (note: still needs multiplying by phytoplankton concentration) 
    2170                !!---------------------------------------------------------------------- 
    2171                !! 
    2172                if (jliebig .eq. 0) then 
    2173                   !! multiplicative nutrient limitation 
    2174                   fpnlim = fnln * ffln 
    2175                elseif (jliebig .eq. 1) then 
    2176                   !! Liebig Law (= most limiting) nutrient limitation 
    2177                   fpnlim = min(fnln, ffln) 
    2178                endif 
    2179                fprn = fjln * fpnlim 
    2180  
    2181                !!---------------------------------------------------------------------- 
    2182                !! Primary production (diatoms) 
    2183                !! (note: still needs multiplying by phytoplankton concentration) 
    2184                !! 
    2185                !! production here is split between nitrogen production and that of 
    2186                !! silicon; depending upon the "intracellular" ratio of Si:N, model 
    2187                !! diatoms will uptake nitrogen/silicon differentially; this borrows 
    2188                !! from the diatom model of Mongin et al. (2006) 
    2189                !!---------------------------------------------------------------------- 
    2190                !! 
    2191                if (jliebig .eq. 0) then 
    2192                   !! multiplicative nutrient limitation 
    2193                   fpdlim = fnld * ffld 
    2194                elseif (jliebig .eq. 1) then 
    2195                   !! Liebig Law (= most limiting) nutrient limitation 
    2196                   fpdlim = min(fnld, ffld) 
    2197                endif 
    2198                !! 
    2199           if (zphd.GT.rsmall .AND. zpds.GT.rsmall) then 
    2200                   !! "intracellular" elemental ratios 
    2201                   ! fsin  = zpds / (zphd + tiny(zphd)) 
    2202                   ! fnsi  = zphd / (zpds + tiny(zpds)) 
    2203                   fsin = 0.0 
    2204                   IF( zphd .GT. rsmall) fsin  = zpds / zphd 
    2205                   fnsi = 0.0 
    2206                   IF( zpds .GT. rsmall) fnsi  = zphd / zpds 
    2207                   !! AXY (23/02/10): these next variables derive from Mongin et al. (2003) 
    2208                   fsin1 = 3.0 * xsin0 !! = 0.6 
    2209                   fnsi1 = 1.0 / fsin1 !! = 1.667 
    2210                   fnsi2 = 1.0 / xsin0 !! = 5.0 
    2211                   !! 
    2212                   !! conditionalities based on ratios 
    2213                   !! nitrogen (and iron and carbon) 
    2214                   if (fsin.le.xsin0) then 
    2215                      fprd  = 0.0 
    2216                      fsld2 = 0.0 
    2217                   elseif (fsin.lt.fsin1) then 
    2218                      fprd  = xuif * ((fsin - xsin0) / (fsin + tiny(fsin))) * (fjld * fpdlim) 
    2219                      fsld2 = xuif * ((fsin - xsin0) / (fsin + tiny(fsin))) 
    2220                   elseif (fsin.ge.fsin1) then 
    2221                      fprd  = (fjld * fpdlim) 
    2222                      fsld2 = 1.0 
    2223                   endif 
    2224                   !! 
    2225                   !! silicon 
    2226                   if (fsin.lt.fnsi1) then 
    2227                      fprds = (fjld * fsld) 
    2228                   elseif (fsin.lt.fnsi2) then 
    2229                      fprds = xuif * ((fnsi - xnsi0) / (fnsi + tiny(fnsi))) * (fjld * fsld) 
    2230                   else 
    2231                      fprds = 0.0 
    2232                   endif      
    2233                else 
    2234                   fsin  = 0.0 
    2235                   fnsi  = 0.0 
    2236                   fprd  = 0.0 
    2237                   fsld2 = 0.0 
    2238                   fprds = 0.0 
    2239                endif 
    2240  
    2241 # if defined key_debug_medusa 
    2242                !! report phytoplankton growth (including diatom silicon submodel) 
    2243                if (idf.eq.1.AND.idfval.eq.1) then 
    2244                   IF (lwp) write (numout,*) '------------------------------' 
    2245                   IF (lwp) write (numout,*) 'fsin(',jk,')   = ', fsin 
    2246                   IF (lwp) write (numout,*) 'fnsi(',jk,')   = ', fnsi 
    2247                   IF (lwp) write (numout,*) 'fsld2(',jk,')  = ', fsld2 
    2248                   IF (lwp) write (numout,*) 'fprn(',jk,')   = ', fprn 
    2249                   IF (lwp) write (numout,*) 'fprd(',jk,')   = ', fprd 
    2250                   IF (lwp) write (numout,*) 'fprds(',jk,')  = ', fprds 
    2251                endif 
     3087                !!---------------------------------------------------------------------- 
     3088                !! Benthic remineralisation fluxes 
     3089                !!---------------------------------------------------------------------- 
     3090                !! 
     3091                if (jk.eq.jmbathy) then 
     3092                   !! 
     3093                   !! organic components 
     3094                   if (jorgben.eq.1) then 
     3095                      f_benout_n(ji,jj)  = xsedn  * zn_sed_n(ji,jj) 
     3096                      f_benout_fe(ji,jj) = xsedfe * zn_sed_fe(ji,jj) 
     3097                      f_benout_c(ji,jj)  = xsedc  * zn_sed_c(ji,jj) 
     3098                   endif 
     3099                   !! 
     3100                   !! inorganic components 
     3101                   if (jinorgben.eq.1) then 
     3102                      f_benout_si(ji,jj) = xsedsi * zn_sed_si(ji,jj) 
     3103                      f_benout_ca(ji,jj) = xsedca * zn_sed_ca(ji,jj) 
     3104                      !! 
     3105                      !! account for CaCO3 that dissolves when it shouldn't 
     3106                      if ( fdep .le. fccd_dep ) then 
     3107                         f_benout_lyso_ca(ji,jj) = xsedca * zn_sed_ca(ji,jj) 
     3108                      endif 
     3109                   endif 
     3110                endif 
     3111                CALL flush(numout) 
     3112 
     3113                !!====================================================================== 
     3114                !! AXY (07/04/17): possible subroutine block; business and updating 
     3115                !!====================================================================== 
     3116 
     3117                !!====================================================================== 
     3118                !! LOCAL GRID CELL TRENDS 
     3119                !!====================================================================== 
     3120                !! 
     3121                !!---------------------------------------------------------------------- 
     3122                !! Determination of trends 
     3123                !!---------------------------------------------------------------------- 
     3124                !! 
     3125                !!---------------------------------------------------------------------- 
     3126                !! chlorophyll 
     3127                btra(jpchn) = b0 * ( & 
     3128                     + ((frn * fprn * zphn) - fgmipn - fgmepn - fdpn - fdpn2) * (fthetan / xxi) ) 
     3129                btra(jpchd) = b0 * ( & 
     3130                     + ((frd * fprd * zphd) - fgmepd - fdpd - fdpd2) * (fthetad / xxi) ) 
     3131                !! 
     3132                !!---------------------------------------------------------------------- 
     3133                !! phytoplankton 
     3134                btra(jpphn) = b0 * ( & 
     3135                     + (fprn * zphn) - fgmipn - fgmepn - fdpn - fdpn2 ) 
     3136                btra(jpphd) = b0 * ( & 
     3137                     + (fprd * zphd) - fgmepd - fdpd - fdpd2 ) 
     3138                btra(jppds) = b0 * ( & 
     3139                     + (fprds * zpds) - fgmepds - fdpds - fsdiss - fdpds2 ) 
     3140                !! 
     3141                !!---------------------------------------------------------------------- 
     3142                !! zooplankton 
     3143                btra(jpzmi) = b0 * ( & 
     3144                     + fmigrow - fgmezmi - fdzmi - fdzmi2 ) 
     3145                btra(jpzme) = b0 * ( & 
     3146                     + fmegrow - fdzme - fdzme2 ) 
     3147                !! 
     3148                !!---------------------------------------------------------------------- 
     3149                !! detritus 
     3150                btra(jpdet) = b0 * ( & 
     3151                     + fdpn + ((1.0 - xfdfrac1) * fdpd)              &  ! mort. losses 
     3152                     + fdzmi + ((1.0 - xfdfrac2) * fdzme)            &  ! mort. losses 
     3153                     + ((1.0 - xbetan) * (finmi + finme))            &  ! assim. inefficiency 
     3154                     - fgmid - fgmed - fdd                           &  ! grazing and remin. 
     3155                     + ffast2slown )                                    ! seafloor fast->slow 
     3156                !! 
     3157                !!---------------------------------------------------------------------- 
     3158                !! dissolved inorganic nitrogen nutrient 
     3159                fn_cons = 0.0  & 
     3160                     - (fprn * zphn) - (fprd * zphd)                    ! primary production 
     3161                fn_prod = 0.0  & 
     3162                     + (xphi * (fgmipn + fgmid))                     &  ! messy feeding remin. 
     3163                     + (xphi * (fgmepn + fgmepd + fgmezmi + fgmed))  &  ! messy feeding remin. 
     3164                     + fmiexcr + fmeexcr + fdd + freminn             &  ! excretion and remin. 
     3165                     + fdpn2 + fdpd2 + fdzmi2 + fdzme2                  ! metab. losses 
     3166                !!  
     3167                !! riverine flux 
     3168                if ( jriver_n .gt. 0 ) then 
     3169                   f_riv_loc_n = f_riv_n(ji,jj) * friver_dep(jk,jmbathy) / fthk 
     3170                   fn_prod = fn_prod + f_riv_loc_n 
     3171                endif 
     3172                !!   
     3173                !! benthic remineralisation 
     3174                if (jk.eq.jmbathy .and. jorgben.eq.1 .and. ibenthic.eq.1) then 
     3175                   fn_prod = fn_prod + (f_benout_n(ji,jj) / fthk) 
     3176                endif 
     3177                !! 
     3178                btra(jpdin) = b0 * ( & 
     3179                     fn_prod + fn_cons ) 
     3180                !! 
     3181                fnit_cons(ji,jj) = fnit_cons(ji,jj) + ( fthk * (  &  ! consumption of dissolved nitrogen 
     3182                     fn_cons ) ) 
     3183                fnit_prod(ji,jj) = fnit_prod(ji,jj) + ( fthk * (  &  ! production of dissolved nitrogen 
     3184                     fn_prod ) ) 
     3185                !! 
     3186                !!---------------------------------------------------------------------- 
     3187                !! dissolved silicic acid nutrient 
     3188                fs_cons = 0.0  & 
     3189                     - (fprds * zpds)                                   ! opal production 
     3190                fs_prod = 0.0  & 
     3191                     + fsdiss                                        &  ! opal dissolution 
     3192                     + ((1.0 - xfdfrac1) * fdpds)                    &  ! mort. loss 
     3193                     + ((1.0 - xfdfrac3) * fgmepds)                  &  ! egestion of grazed Si 
     3194                     + freminsi + fdpds2                                ! fast diss. and metab. losses 
     3195                !!  
     3196                !! riverine flux 
     3197                if ( jriver_si .gt. 0 ) then 
     3198                   f_riv_loc_si = f_riv_si(ji,jj) * friver_dep(jk,jmbathy) / fthk 
     3199                   fs_prod = fs_prod + f_riv_loc_si 
     3200                endif 
     3201                !!   
     3202                !! benthic remineralisation 
     3203                if (jk.eq.jmbathy .and. jinorgben.eq.1 .and. ibenthic.eq.1) then 
     3204                   fs_prod = fs_prod + (f_benout_si(ji,jj) / fthk) 
     3205                endif 
     3206                !! 
     3207                btra(jpsil) = b0 * ( & 
     3208                     fs_prod + fs_cons ) 
     3209                !! 
     3210                fsil_cons(ji,jj) = fsil_cons(ji,jj) + ( fthk * (  &  ! consumption of dissolved silicon 
     3211                     fs_cons ) ) 
     3212                fsil_prod(ji,jj) = fsil_prod(ji,jj) + ( fthk * (  &  ! production of dissolved silicon 
     3213                     fs_prod ) ) 
     3214                !! 
     3215                !!---------------------------------------------------------------------- 
     3216                !! dissolved "iron" nutrient 
     3217                btra(jpfer) = b0 * ( & 
     3218                     + (xrfn * btra(jpdin)) + ffetop + ffebot - ffescav ) 
     3219 
     3220# if defined key_roam 
     3221                !! 
     3222                !!---------------------------------------------------------------------- 
     3223                !! AXY (26/11/08): implicit detrital carbon change 
     3224                btra(jpdtc) = b0 * ( & 
     3225                     + (xthetapn * fdpn) + ((1.0 - xfdfrac1) * (xthetapd * fdpd))      &  ! mort. losses 
     3226                     + (xthetazmi * fdzmi) + ((1.0 - xfdfrac2) * (xthetazme * fdzme))  &  ! mort. losses 
     3227                     + ((1.0 - xbetac) * (ficmi + ficme))                              &  ! assim. inefficiency 
     3228                     - fgmidc - fgmedc - fddc                                          &  ! grazing and remin. 
     3229                     + ffast2slowc )                                                      ! seafloor fast->slow 
     3230                !! 
     3231                !!---------------------------------------------------------------------- 
     3232                !! dissolved inorganic carbon 
     3233                fc_cons = 0.0  & 
     3234                     - (xthetapn * fprn * zphn) - (xthetapd * fprd * zphd)                ! primary production 
     3235                fc_prod = 0.0  & 
     3236                     + (xthetapn * xphi * fgmipn) + (xphi * fgmidc)                    &  ! messy feeding remin 
     3237                     + (xthetapn * xphi * fgmepn) + (xthetapd * xphi * fgmepd)         &  ! messy feeding remin 
     3238                     + (xthetazmi * xphi * fgmezmi) + (xphi * fgmedc)                  &  ! messy feeding remin 
     3239                     + fmiresp + fmeresp + fddc + freminc + (xthetapn * fdpn2)         &  ! resp., remin., losses 
     3240                     + (xthetapd * fdpd2) + (xthetazmi * fdzmi2)                       &  ! losses 
     3241                     + (xthetazme * fdzme2)                                               ! losses 
     3242                !!  
     3243                !! riverine flux 
     3244                if ( jriver_c .gt. 0 ) then 
     3245                   f_riv_loc_c = f_riv_c(ji,jj) * friver_dep(jk,jmbathy) / fthk 
     3246                   fc_prod = fc_prod + f_riv_loc_c 
     3247                endif 
     3248                !!   
     3249                !! benthic remineralisation 
     3250                if (jk.eq.jmbathy .and. jorgben.eq.1 .and. ibenthic.eq.1) then 
     3251                   fc_prod = fc_prod + (f_benout_c(ji,jj) / fthk) 
     3252                endif 
     3253                if (jk.eq.jmbathy .and. jinorgben.eq.1 .and. ibenthic.eq.1) then 
     3254                   fc_prod = fc_prod + (f_benout_ca(ji,jj) / fthk) 
     3255                endif 
     3256                !! 
     3257                !! community respiration (does not include CaCO3 terms - obviously!) 
     3258                fcomm_resp(ji,jj) = fcomm_resp(ji,jj) + fc_prod 
     3259                !! 
     3260                !! CaCO3 
     3261                fc_prod = fc_prod - ftempca + freminca 
     3262                !!  
     3263                !! riverine flux 
     3264                if ( jk .eq. 1 .and. jriver_c .gt. 0 ) then 
     3265                   fc_prod = fc_prod + f_riv_c(ji,jj) 
     3266                endif 
     3267                !! 
     3268                btra(jpdic) = b0 * ( & 
     3269                     fc_prod + fc_cons ) 
     3270                !! 
     3271                fcar_cons(ji,jj) = fcar_cons(ji,jj) + ( fthk * (  &  ! consumption of dissolved carbon 
     3272                     fc_cons ) ) 
     3273                fcar_prod(ji,jj) = fcar_prod(ji,jj) + ( fthk * (  &  ! production of dissolved carbon 
     3274                     fc_prod ) ) 
     3275                !! 
     3276                !!---------------------------------------------------------------------- 
     3277                !! alkalinity 
     3278                fa_prod = 0.0  & 
     3279                     + (2.0 * freminca)                                                   ! CaCO3 dissolution 
     3280                fa_cons = 0.0  & 
     3281                     - (2.0 * ftempca)                                                    ! CaCO3 production 
     3282                !!  
     3283                !! riverine flux 
     3284                if ( jriver_alk .gt. 0 ) then 
     3285                   f_riv_loc_alk = f_riv_alk(ji,jj) * friver_dep(jk,jmbathy) / fthk 
     3286                   fa_prod = fa_prod + f_riv_loc_alk 
     3287                endif 
     3288                !!   
     3289                !! benthic remineralisation 
     3290                if (jk.eq.jmbathy .and. jinorgben.eq.1 .and. ibenthic.eq.1) then 
     3291                   fa_prod = fa_prod + (2.0 * f_benout_ca(ji,jj) / fthk) 
     3292                endif 
     3293                !! 
     3294                btra(jpalk) = b0 * ( & 
     3295                     fa_prod + fa_cons ) 
     3296                !! 
     3297                !!---------------------------------------------------------------------- 
     3298                !! oxygen (has protection at low O2 concentrations; OCMIP-2 style) 
     3299                fo2_prod = 0.0 & 
     3300                     + (xthetanit * fprn * zphn)                                      & ! Pn primary production, N 
     3301                     + (xthetanit * fprd * zphd)                                      & ! Pd primary production, N 
     3302                     + (xthetarem * xthetapn * fprn * zphn)                           & ! Pn primary production, C 
     3303                     + (xthetarem * xthetapd * fprd * zphd)                             ! Pd primary production, C 
     3304                fo2_ncons = 0.0 & 
     3305                     - (xthetanit * xphi * fgmipn)                                    & ! Pn messy feeding remin., N 
     3306                     - (xthetanit * xphi * fgmid)                                     & ! D  messy feeding remin., N 
     3307                     - (xthetanit * xphi * fgmepn)                                    & ! Pn messy feeding remin., N 
     3308                     - (xthetanit * xphi * fgmepd)                                    & ! Pd messy feeding remin., N 
     3309                     - (xthetanit * xphi * fgmezmi)                                   & ! Zi messy feeding remin., N 
     3310                     - (xthetanit * xphi * fgmed)                                     & ! D  messy feeding remin., N 
     3311                     - (xthetanit * fmiexcr)                                          & ! microzoo excretion, N 
     3312                     - (xthetanit * fmeexcr)                                          & ! mesozoo  excretion, N 
     3313                     - (xthetanit * fdd)                                              & ! slow detritus remin., N  
     3314                     - (xthetanit * freminn)                                          & ! fast detritus remin., N 
     3315                     - (xthetanit * fdpn2)                                            & ! Pn  losses, N 
     3316                     - (xthetanit * fdpd2)                                            & ! Pd  losses, N 
     3317                     - (xthetanit * fdzmi2)                                           & ! Zmi losses, N 
     3318                     - (xthetanit * fdzme2)                                             ! Zme losses, N 
     3319                !!   
     3320                !! benthic remineralisation 
     3321                if (jk.eq.jmbathy .and. jorgben.eq.1 .and. ibenthic.eq.1) then 
     3322                   fo2_ncons = fo2_ncons - (xthetanit * f_benout_n(ji,jj) / fthk) 
     3323                endif 
     3324                fo2_ccons = 0.0 & 
     3325                     - (xthetarem * xthetapn * xphi * fgmipn)                         & ! Pn messy feeding remin., C 
     3326                     - (xthetarem * xphi * fgmidc)                                    & ! D  messy feeding remin., C 
     3327                     - (xthetarem * xthetapn * xphi * fgmepn)                         & ! Pn messy feeding remin., C 
     3328                     - (xthetarem * xthetapd * xphi * fgmepd)                         & ! Pd messy feeding remin., C 
     3329                     - (xthetarem * xthetazmi * xphi * fgmezmi)                       & ! Zi messy feeding remin., C 
     3330                     - (xthetarem * xphi * fgmedc)                                    & ! D  messy feeding remin., C 
     3331                     - (xthetarem * fmiresp)                                          & ! microzoo respiration, C 
     3332                     - (xthetarem * fmeresp)                                          & ! mesozoo  respiration, C 
     3333                     - (xthetarem * fddc)                                             & ! slow detritus remin., C 
     3334                     - (xthetarem * freminc)                                          & ! fast detritus remin., C 
     3335                     - (xthetarem * xthetapn * fdpn2)                                 & ! Pn  losses, C 
     3336                     - (xthetarem * xthetapd * fdpd2)                                 & ! Pd  losses, C 
     3337                     - (xthetarem * xthetazmi * fdzmi2)                               & ! Zmi losses, C 
     3338                     - (xthetarem * xthetazme * fdzme2)                                 ! Zme losses, C 
     3339                !!   
     3340                !! benthic remineralisation 
     3341                if (jk.eq.jmbathy .and. jorgben.eq.1 .and. ibenthic.eq.1) then 
     3342                   fo2_ccons = fo2_ccons - (xthetarem * f_benout_c(ji,jj) / fthk) 
     3343                endif 
     3344                fo2_cons = fo2_ncons + fo2_ccons 
     3345                !! 
     3346                !! is this a suboxic zone? 
     3347                if (zoxy.lt.xo2min) then  ! deficient O2; production fluxes only 
     3348                   btra(jpoxy) = b0 * ( & 
     3349                        fo2_prod ) 
     3350                   foxy_prod(ji,jj) = foxy_prod(ji,jj) + ( fthk * fo2_prod ) 
     3351                   foxy_anox(ji,jj) = foxy_anox(ji,jj) + ( fthk * fo2_cons ) 
     3352                else                      ! sufficient O2; production + consumption fluxes 
     3353                   btra(jpoxy) = b0 * ( & 
     3354                        fo2_prod + fo2_cons ) 
     3355                   foxy_prod(ji,jj) = foxy_prod(ji,jj) + ( fthk * fo2_prod ) 
     3356                   foxy_cons(ji,jj) = foxy_cons(ji,jj) + ( fthk * fo2_cons ) 
     3357                endif 
     3358                !! 
     3359                !! air-sea fluxes (if this is the surface box) 
     3360                if (jk.eq.1) then 
     3361                   !! 
     3362                   !! CO2 flux 
     3363                   btra(jpdic) = btra(jpdic) + (b0 * f_co2flux) 
     3364                   !! 
     3365                   !! O2 flux (mol/m3/s -> mmol/m3/d) 
     3366                   btra(jpoxy) = btra(jpoxy) + (b0 * f_o2flux) 
     3367                endif 
    22523368# endif 
    22533369 
    2254                !!---------------------------------------------------------------------- 
    2255                !! Mixed layer primary production 
    2256                !! this block calculates the amount of primary production that occurs 
    2257                !! within the upper mixed layer; this allows the separate diagnosis 
    2258                !! of "sub-surface" primary production; it does assume that short- 
    2259                !! term variability in mixed layer depth doesn't mess with things 
    2260                !! though 
    2261                !!---------------------------------------------------------------------- 
    2262                !! 
    2263                if (fdep1.le.hmld(ji,jj)) then 
    2264                   !! this level is entirely in the mixed layer 
    2265                   fq0 = 1.0 
    2266                elseif (fdep.ge.hmld(ji,jj)) then 
    2267                   !! this level is entirely below the mixed layer 
    2268                   fq0 = 0.0 
    2269                else 
    2270                   !! this level straddles the mixed layer 
    2271                   fq0 = (hmld(ji,jj) - fdep) / fthk 
    2272                endif 
    2273                !! 
    2274                fprn_ml(ji,jj) = fprn_ml(ji,jj) + (fprn * zphn * fthk * fq0) 
    2275                fprd_ml(ji,jj) = fprd_ml(ji,jj) + (fprd * zphd * fthk * fq0) 
    2276                 
    2277                !!---------------------------------------------------------------------- 
    2278                !! Vertical Integral -- 
    2279                !!---------------------------------------------------------------------- 
    2280                ftot_pn(ji,jj)  = ftot_pn(ji,jj)  + (zphn * fthk)   !! vertical integral non-diatom phytoplankton 
    2281                ftot_pd(ji,jj)  = ftot_pd(ji,jj)  + (zphd * fthk)   !! vertical integral diatom phytoplankton 
    2282                ftot_zmi(ji,jj) = ftot_zmi(ji,jj) + (zzmi * fthk)   !! vertical integral microzooplankton 
    2283                ftot_zme(ji,jj) = ftot_zme(ji,jj) + (zzme * fthk)   !! vertical integral mesozooplankton 
    2284                ftot_det(ji,jj) = ftot_det(ji,jj) + (zdet * fthk)   !! vertical integral slow detritus, nitrogen 
    2285                ftot_dtc(ji,jj) = ftot_dtc(ji,jj) + (zdtc * fthk)   !! vertical integral slow detritus, carbon 
    2286                 
    2287                !!---------------------------------------------------------------------- 
    2288                !! More chlorophyll calculations 
    2289                !!---------------------------------------------------------------------- 
    2290                !! 
    2291                !! frn = (xthetam / fthetan) * (fprn / (fthetan * xpar(ji,jj,jk))) 
    2292                !! frd = (xthetam / fthetad) * (fprd / (fthetad * xpar(ji,jj,jk))) 
    2293                frn = (xthetam * fchn * fnln * ffln       ) / (fthetan + tiny(fthetan)) 
    2294                !! AXY (12/05/09): there's potentially a problem here; fsld, silicic acid  
    2295                !!   limitation, is used in the following line to regulate chlorophyll  
    2296                !!   growth in a manner that is inconsistent with its use in the regulation  
    2297                !!   of biomass growth; the Mongin term term used in growth is more complex 
    2298                !!   than the simple multiplicative function used below 
    2299                !! frd = (xthetam * fchd * fnld * ffld * fsld) / (fthetad + tiny(fthetad)) 
    2300                !! AXY (12/05/09): this replacement line uses the new variable, fsld2, to 
    2301                !!   regulate chlorophyll growth 
    2302                frd = (xthetamd * fchd * fnld * ffld * fsld2) / (fthetad + tiny(fthetad)) 
    2303  
    2304 # if defined key_debug_medusa 
    2305                !! report chlorophyll calculations 
    2306                if (idf.eq.1.AND.idfval.eq.1) then 
    2307                   IF (lwp) write (numout,*) '------------------------------' 
    2308                   IF (lwp) write (numout,*) 'fthetan(',jk,') = ', fthetan 
    2309                   IF (lwp) write (numout,*) 'fthetad(',jk,') = ', fthetad 
    2310                   IF (lwp) write (numout,*) 'frn(',jk,')     = ', frn 
    2311                   IF (lwp) write (numout,*) 'frd(',jk,')     = ', frd 
    2312                endif 
     3370                !!---------------------------------------------------------------------- 
     3371                !! Integrate calculated fluxes for mass balance 
     3372                !!---------------------------------------------------------------------- 
     3373                !! 
     3374                !! === nitrogen === 
     3375                fflx_n(ji,jj)  = fflx_n(ji,jj)  + & 
     3376                     fthk * ( btra(jpphn) + btra(jpphd) + btra(jpzmi) + btra(jpzme) + btra(jpdet) + btra(jpdin) ) 
     3377                !! === silicon === 
     3378                fflx_si(ji,jj) = fflx_si(ji,jj) + & 
     3379                     fthk * ( btra(jppds) + btra(jpsil) ) 
     3380                !! === iron === 
     3381                fflx_fe(ji,jj) = fflx_fe(ji,jj) + & 
     3382                     fthk * ( ( xrfn * ( btra(jpphn) + btra(jpphd) + btra(jpzmi) + btra(jpzme) + btra(jpdet)) ) + btra(jpfer) ) 
     3383# if defined key_roam 
     3384                !! === carbon === 
     3385                fflx_c(ji,jj)  = fflx_c(ji,jj)  + & 
     3386                     fthk * ( (xthetapn * btra(jpphn)) + (xthetapd * btra(jpphd)) + & 
     3387                     (xthetazmi * btra(jpzmi)) + (xthetazme * btra(jpzme)) + btra(jpdtc) + btra(jpdic) ) 
     3388                !! === alkalinity === 
     3389                fflx_a(ji,jj)  = fflx_a(ji,jj)  + & 
     3390                     fthk * ( btra(jpalk) ) 
     3391                !! === oxygen === 
     3392                fflx_o2(ji,jj) = fflx_o2(ji,jj) + & 
     3393                     fthk * ( btra(jpoxy) ) 
    23133394# endif 
    23143395 
    2315                !!---------------------------------------------------------------------- 
    2316                !! Zooplankton Grazing  
    2317                !! this code supplements the base grazing model with one that 
    2318                !! considers the C:N ratio of grazed food and balances this against 
    2319                !! the requirements of zooplankton growth; this model is derived  
    2320                !! from that of Anderson & Pondaven (2003) 
    2321                !! 
    2322                !! the current version of the code assumes a fixed C:N ratio for 
    2323                !! detritus (in contrast to Anderson & Pondaven, 2003), though the 
    2324                !! full equations are retained for future extension 
    2325                !!---------------------------------------------------------------------- 
    2326                !! 
    2327                !!---------------------------------------------------------------------- 
    2328                !! Microzooplankton first 
    2329                !!---------------------------------------------------------------------- 
    2330                !! 
    2331                fmi1    = (xkmi * xkmi) + (xpmipn * zphn * zphn) + (xpmid * zdet * zdet) 
    2332                fmi     = xgmi * zzmi / fmi1 
    2333                fgmipn  = fmi * xpmipn * zphn * zphn   !! grazing on non-diatoms 
    2334                fgmid   = fmi * xpmid  * zdet * zdet   !! grazing on detrital nitrogen 
     3396                !!---------------------------------------------------------------------- 
     3397                !! Apply calculated tracer fluxes 
     3398                !!---------------------------------------------------------------------- 
     3399                !! 
     3400                !! units: [unit of tracer] per second (fluxes are calculated above per day) 
     3401                !! 
     3402                ibio_switch = 1 
     3403# if defined key_gulf_finland 
     3404                !! AXY (17/05/13): fudge in a Gulf of Finland correction; uses longitude- 
     3405                !!                 latitude range to establish if this is a Gulf of Finland  
     3406                !!                 grid cell; if so, then BGC fluxes are ignored (though  
     3407                !!                 still calculated); for reference, this is meant to be a  
     3408                !!                 temporary fix to see if all of my problems can be done  
     3409                !!                 away with if I switch off BGC fluxes in the Gulf of  
     3410                !!                 Finland, which currently appears the source of trouble 
     3411                if ( flonx.gt.24.7 .and. flonx.lt.27.8 .and. & 
     3412                     &   flatx.gt.59.2 .and. flatx.lt.60.2 ) then 
     3413                   ibio_switch = 0 
     3414                endif 
     3415# endif                
     3416                if (ibio_switch.eq.1) then 
     3417                   tra(ji,jj,jk,jpchn) = tra(ji,jj,jk,jpchn) + (btra(jpchn) / 86400.) 
     3418                   tra(ji,jj,jk,jpchd) = tra(ji,jj,jk,jpchd) + (btra(jpchd) / 86400.) 
     3419                   tra(ji,jj,jk,jpphn) = tra(ji,jj,jk,jpphn) + (btra(jpphn) / 86400.) 
     3420                   tra(ji,jj,jk,jpphd) = tra(ji,jj,jk,jpphd) + (btra(jpphd) / 86400.) 
     3421                   tra(ji,jj,jk,jppds) = tra(ji,jj,jk,jppds) + (btra(jppds) / 86400.) 
     3422                   tra(ji,jj,jk,jpzmi) = tra(ji,jj,jk,jpzmi) + (btra(jpzmi) / 86400.) 
     3423                   tra(ji,jj,jk,jpzme) = tra(ji,jj,jk,jpzme) + (btra(jpzme) / 86400.) 
     3424                   tra(ji,jj,jk,jpdet) = tra(ji,jj,jk,jpdet) + (btra(jpdet) / 86400.) 
     3425                   tra(ji,jj,jk,jpdin) = tra(ji,jj,jk,jpdin) + (btra(jpdin) / 86400.) 
     3426                   tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) + (btra(jpsil) / 86400.) 
     3427                   tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + (btra(jpfer) / 86400.) 
    23353428# if defined key_roam 
    2336                fgmidc  = rsmall !acc 
    2337                IF ( zdet .GT. rsmall ) fgmidc  = (zdtc / (zdet + tiny(zdet))) * fgmid  !! grazing on detrital carbon 
     3429                   tra(ji,jj,jk,jpdtc) = tra(ji,jj,jk,jpdtc) + (btra(jpdtc) / 86400.) 
     3430                   tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + (btra(jpdic) / 86400.) 
     3431                   tra(ji,jj,jk,jpalk) = tra(ji,jj,jk,jpalk) + (btra(jpalk) / 86400.) 
     3432                   tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + (btra(jpoxy) / 86400.) 
     3433# endif 
     3434                endif 
     3435 
     3436                !! AXY (18/11/16): CMIP6 diagnostics 
     3437                IF( med_diag%FBDDTALK%dgsave )  THEN 
     3438                   fbddtalk(ji,jj)  =  fbddtalk(ji,jj)  + (btra(jpalk) * fthk) 
     3439                ENDIF 
     3440                IF( med_diag%FBDDTDIC%dgsave )  THEN 
     3441                   fbddtdic(ji,jj)  =  fbddtdic(ji,jj)  + (btra(jpdic) * fthk) 
     3442                ENDIF 
     3443                IF( med_diag%FBDDTDIFE%dgsave ) THEN 
     3444                   fbddtdife(ji,jj) =  fbddtdife(ji,jj) + (btra(jpfer) * fthk) 
     3445                ENDIF 
     3446                IF( med_diag%FBDDTDIN%dgsave )  THEN 
     3447                   fbddtdin(ji,jj)  =  fbddtdin(ji,jj)  + (btra(jpdin) * fthk) 
     3448                ENDIF 
     3449                IF( med_diag%FBDDTDISI%dgsave ) THEN 
     3450                   fbddtdisi(ji,jj) =  fbddtdisi(ji,jj) + (btra(jpsil) * fthk) 
     3451                ENDIF 
     3452                !! 
     3453                IF( med_diag%BDDTALK3%dgsave )  THEN 
     3454                   bddtalk3(ji,jj,jk)  =  btra(jpalk) 
     3455                ENDIF 
     3456                IF( med_diag%BDDTDIC3%dgsave )  THEN 
     3457                   bddtdic3(ji,jj,jk)  =  btra(jpdic) 
     3458                ENDIF 
     3459                IF( med_diag%BDDTDIFE3%dgsave ) THEN 
     3460                   bddtdife3(ji,jj,jk) =  btra(jpfer) 
     3461                ENDIF 
     3462                IF( med_diag%BDDTDIN3%dgsave )  THEN 
     3463                   bddtdin3(ji,jj,jk)  =  btra(jpdin) 
     3464                ENDIF 
     3465                IF( med_diag%BDDTDISI3%dgsave ) THEN 
     3466                   bddtdisi3(ji,jj,jk) =  btra(jpsil) 
     3467                ENDIF 
     3468 
     3469#   if defined key_debug_medusa 
     3470                IF ( lwp ) write (numout,*) '------' 
     3471                IF ( lwp ) write (numout,*) 'trc_bio_medusa: end all calculations' 
     3472                IF ( lwp ) write (numout,*) 'trc_bio_medusa: now outputs' 
     3473                CALL flush(numout) 
     3474#   endif 
     3475 
     3476# if defined key_axy_nancheck 
     3477                !!---------------------------------------------------------------------- 
     3478                !! Check calculated tracer fluxes 
     3479                !!---------------------------------------------------------------------- 
     3480                !! 
     3481                DO jn = 1,jptra 
     3482                   fq0 = btra(jn) 
     3483                   !! AXY (30/01/14): "isnan" problem on HECTOR 
     3484                   !! if (fq0 /= fq0 ) then 
     3485                   if ( ieee_is_nan( fq0 ) ) then 
     3486                      !! there's a NaN here 
     3487                      if (lwp) write(numout,*) 'NAN detected in btra(', ji, ',', & 
     3488                           & jj, ',', jk, ',', jn, ') at time', kt 
     3489                      CALL ctl_stop( 'trcbio_medusa, NAN in btra field' ) 
     3490                   endif 
     3491                ENDDO 
     3492                DO jn = 1,jptra 
     3493                   fq0 = tra(ji,jj,jk,jn) 
     3494                   !! AXY (30/01/14): "isnan" problem on HECTOR 
     3495                   !! if (fq0 /= fq0 ) then 
     3496                   if ( ieee_is_nan( fq0 ) ) then 
     3497                      !! there's a NaN here 
     3498                      if (lwp) write(numout,*) 'NAN detected in tra(', ji, ',', & 
     3499                           & jj, ',', jk, ',', jn, ') at time', kt 
     3500                      CALL ctl_stop( 'trcbio_medusa, NAN in tra field' ) 
     3501                   endif 
     3502                ENDDO 
     3503                CALL flush(numout) 
     3504# endif 
     3505 
     3506                !!---------------------------------------------------------------------- 
     3507                !! Check model conservation 
     3508                !! these terms merely sum up the tendency terms of the relevant 
     3509                !! state variables, which should sum to zero; the iron cycle is 
     3510                !! complicated by fluxes that add (aeolian deposition and seafloor 
     3511                !! remineralisation) and remove (scavenging) dissolved iron from 
     3512                !! the model (i.e. the sum of iron fluxes is unlikely to be zero) 
     3513                !!---------------------------------------------------------------------- 
     3514                !! 
     3515                !! fnit0 = btra(jpphn) + btra(jpphd) + btra(jpzmi) + btra(jpzme) + btra(jpdet) + btra(jpdin)  ! + ftempn 
     3516                !! fsil0 = btra(jppds) + btra(jpsil)                              ! + ftempsi 
     3517                !! ffer0 = (xrfn * fnit0) + btra(jpfer) 
     3518# if defined key_roam 
     3519                !! fcar0 = 0. 
     3520                !! falk0 = 0. 
     3521                !! foxy0 = 0. 
     3522# endif 
     3523                !! 
     3524                !! if (kt/240*240.eq.kt) then 
     3525                !!    if (ji.eq.2.and.jj.eq.2.and.jk.eq.1) then 
     3526                !!       IF ( lwp ) write (*,*) '*******!MEDUSA Conservation!*******',kt 
     3527# if defined key_roam 
     3528                !!       IF ( lwp ) write (*,*) fnit0,fsil0,ffer0,fcar0,falk0,foxy0 
    23383529# else 
    2339                !! AXY (26/11/08): implicit detrital carbon change 
    2340                fgmidc  = xthetad * fgmid              !! grazing on detrital carbon 
     3530                !!       IF ( lwp ) write (*,*) fnit0,fsil0,ffer0 
    23413531# endif 
    2342                !! 
    2343                !! which translates to these incoming N and C fluxes 
    2344                finmi   = (1.0 - xphi) * (fgmipn + fgmid) 
    2345                ficmi   = (1.0 - xphi) * ((xthetapn * fgmipn) + fgmidc) 
    2346                !! 
    2347                !! the ideal food C:N ratio for microzooplankton 
    2348                !! xbetan = 0.77; xthetaz = 5.625; xbetac = 0.64; xkc = 0.80 
    2349                fstarmi = (xbetan * xthetazmi) / (xbetac * xkc) 
    2350                !! 
    2351                !! process these to determine proportioning of grazed N and C 
    2352                !! (since there is no explicit consideration of respiration, 
    2353                !! only growth and excretion are calculated here) 
    2354                fmith   = (ficmi / (finmi + tiny(finmi))) 
    2355                if (fmith.ge.fstarmi) then 
    2356                   fmigrow = xbetan * finmi 
    2357                   fmiexcr = 0.0 
    2358                else 
    2359                   fmigrow = (xbetac * xkc * ficmi) / xthetazmi 
    2360                   fmiexcr = ficmi * ((xbetan / (fmith + tiny(fmith))) - ((xbetac * xkc) / xthetazmi)) 
    2361                endif 
    2362 # if defined key_roam 
    2363                fmiresp = (xbetac * ficmi) - (xthetazmi * fmigrow) 
    2364 # endif 
    2365  
    2366 # if defined key_debug_medusa 
    2367                !! report microzooplankton grazing 
    2368                if (idf.eq.1.AND.idfval.eq.1) then 
    2369                   IF (lwp) write (numout,*) '------------------------------' 
    2370                   IF (lwp) write (numout,*) 'fmi1(',jk,')    = ', fmi1 
    2371                   IF (lwp) write (numout,*) 'fmi(',jk,')     = ', fmi 
    2372                   IF (lwp) write (numout,*) 'fgmipn(',jk,')  = ', fgmipn 
    2373                   IF (lwp) write (numout,*) 'fgmid(',jk,')   = ', fgmid 
    2374                   IF (lwp) write (numout,*) 'fgmidc(',jk,')  = ', fgmidc 
    2375                   IF (lwp) write (numout,*) 'finmi(',jk,')   = ', finmi 
    2376                   IF (lwp) write (numout,*) 'ficmi(',jk,')   = ', ficmi 
    2377                   IF (lwp) write (numout,*) 'fstarmi(',jk,') = ', fstarmi 
    2378                   IF (lwp) write (numout,*) 'fmith(',jk,')   = ', fmith 
    2379                   IF (lwp) write (numout,*) 'fmigrow(',jk,') = ', fmigrow 
    2380                   IF (lwp) write (numout,*) 'fmiexcr(',jk,') = ', fmiexcr 
    2381 #  if defined key_roam 
    2382                   IF (lwp) write (numout,*) 'fmiresp(',jk,') = ', fmiresp 
    2383 #  endif 
    2384                endif 
    2385 # endif 
    2386  
    2387                !!---------------------------------------------------------------------- 
    2388                !! Mesozooplankton second 
    2389                !!---------------------------------------------------------------------- 
    2390                !! 
    2391                fme1    = (xkme * xkme) + (xpmepn * zphn * zphn) + (xpmepd * zphd * zphd) + &  
    2392                          (xpmezmi * zzmi * zzmi) + (xpmed * zdet * zdet) 
    2393                fme     = xgme * zzme / fme1 
    2394                fgmepn  = fme * xpmepn  * zphn * zphn  !! grazing on non-diatoms 
    2395                fgmepd  = fme * xpmepd  * zphd * zphd  !! grazing on diatoms 
    2396                fgmepds = fsin * fgmepd                !! grazing on diatom silicon 
    2397                fgmezmi = fme * xpmezmi * zzmi * zzmi  !! grazing on microzooplankton 
    2398                fgmed   = fme * xpmed   * zdet * zdet  !! grazing on detrital nitrogen 
    2399 # if defined key_roam 
    2400                fgmedc  = rsmall !acc 
    2401                IF ( zdet .GT. rsmall ) fgmedc  = (zdtc / (zdet + tiny(zdet))) * fgmed  !! grazing on detrital carbon 
    2402 # else 
    2403                !! AXY (26/11/08): implicit detrital carbon change 
    2404                fgmedc  = xthetad * fgmed              !! grazing on detrital carbon 
    2405 # endif 
    2406                !! 
    2407                !! which translates to these incoming N and C fluxes 
    2408                finme   = (1.0 - xphi) * (fgmepn + fgmepd + fgmezmi + fgmed) 
    2409                ficme   = (1.0 - xphi) * ((xthetapn * fgmepn) + (xthetapd * fgmepd) + & 
    2410                         (xthetazmi * fgmezmi) + fgmedc) 
    2411                !! 
    2412                !! the ideal food C:N ratio for mesozooplankton 
    2413                !! xbetan = 0.77; xthetaz = 5.625; xbetac = 0.64; xkc = 0.80 
    2414                fstarme = (xbetan * xthetazme) / (xbetac * xkc) 
    2415                !! 
    2416                !! process these to determine proportioning of grazed N and C 
    2417                !! (since there is no explicit consideration of respiration, 
    2418                !! only growth and excretion are calculated here) 
    2419                fmeth   = (ficme / (finme + tiny(finme))) 
    2420                if (fmeth.ge.fstarme) then 
    2421                   fmegrow = xbetan * finme 
    2422                   fmeexcr = 0.0 
    2423                else 
    2424                   fmegrow = (xbetac * xkc * ficme) / xthetazme 
    2425                   fmeexcr = ficme * ((xbetan / (fmeth + tiny(fmeth))) - ((xbetac * xkc) / xthetazme)) 
    2426                endif 
    2427 # if defined key_roam 
    2428                fmeresp = (xbetac * ficme) - (xthetazme * fmegrow) 
    2429 # endif 
    2430  
    2431 # if defined key_debug_medusa 
    2432                !! report mesozooplankton grazing 
    2433                if (idf.eq.1.AND.idfval.eq.1) then 
    2434                   IF (lwp) write (numout,*) '------------------------------' 
    2435                   IF (lwp) write (numout,*) 'fme1(',jk,')    = ', fme1 
    2436                   IF (lwp) write (numout,*) 'fme(',jk,')     = ', fme 
    2437                   IF (lwp) write (numout,*) 'fgmepn(',jk,')  = ', fgmepn 
    2438                   IF (lwp) write (numout,*) 'fgmepd(',jk,')  = ', fgmepd 
    2439                   IF (lwp) write (numout,*) 'fgmepds(',jk,') = ', fgmepds 
    2440                   IF (lwp) write (numout,*) 'fgmezmi(',jk,') = ', fgmezmi 
    2441                   IF (lwp) write (numout,*) 'fgmed(',jk,')   = ', fgmed 
    2442                   IF (lwp) write (numout,*) 'fgmedc(',jk,')  = ', fgmedc 
    2443                   IF (lwp) write (numout,*) 'finme(',jk,')   = ', finme 
    2444                   IF (lwp) write (numout,*) 'ficme(',jk,')   = ', ficme 
    2445                   IF (lwp) write (numout,*) 'fstarme(',jk,') = ', fstarme 
    2446                   IF (lwp) write (numout,*) 'fmeth(',jk,')   = ', fmeth 
    2447                   IF (lwp) write (numout,*) 'fmegrow(',jk,') = ', fmegrow 
    2448                   IF (lwp) write (numout,*) 'fmeexcr(',jk,') = ', fmeexcr 
    2449 #  if defined key_roam 
    2450                   IF (lwp) write (numout,*) 'fmeresp(',jk,') = ', fmeresp 
    2451 #  endif 
    2452                endif 
    2453 # endif 
    2454  
    2455                fzmi_i(ji,jj)  = fzmi_i(ji,jj)  + fthk * (  & 
    2456                   fgmipn + fgmid ) 
    2457                fzmi_o(ji,jj)  = fzmi_o(ji,jj)  + fthk * (  & 
    2458                   fmigrow + (xphi * (fgmipn + fgmid)) + fmiexcr + ((1.0 - xbetan) * finmi) ) 
    2459                fzme_i(ji,jj)  = fzme_i(ji,jj)  + fthk * (  & 
    2460                   fgmepn + fgmepd + fgmezmi + fgmed ) 
    2461                fzme_o(ji,jj)  = fzme_o(ji,jj)  + fthk * (  & 
    2462                   fmegrow + (xphi * (fgmepn + fgmepd + fgmezmi + fgmed)) + fmeexcr + ((1.0 - xbetan) * finme) ) 
    2463  
    2464                !!---------------------------------------------------------------------- 
    2465                !! Plankton metabolic losses 
    2466                !! Linear loss processes assumed to be metabolic in origin 
    2467                !!---------------------------------------------------------------------- 
    2468                !! 
    2469                fdpn2  = xmetapn  * zphn 
    2470                fdpd2  = xmetapd  * zphd 
    2471                fdpds2 = xmetapd  * zpds 
    2472                fdzmi2 = xmetazmi * zzmi 
    2473                fdzme2 = xmetazme * zzme 
    2474  
    2475                !!---------------------------------------------------------------------- 
    2476                !! Plankton mortality losses 
    2477                !! EKP (26/02/09): phytoplankton hyperbolic mortality term introduced  
    2478                !! to improve performance in gyres 
    2479                !!---------------------------------------------------------------------- 
    2480                !! 
    2481                !! non-diatom phytoplankton 
    2482                if (jmpn.eq.1) fdpn = xmpn * zphn               !! linear 
    2483                if (jmpn.eq.2) fdpn = xmpn * zphn * zphn        !! quadratic 
    2484                if (jmpn.eq.3) fdpn = xmpn * zphn * &           !! hyperbolic 
    2485                   (zphn / (xkphn + zphn)) 
    2486                if (jmpn.eq.4) fdpn = xmpn * zphn * &           !! sigmoid 
    2487                   ((zphn * zphn) / (xkphn + (zphn * zphn))) 
    2488                !! 
    2489                !! diatom phytoplankton 
    2490                if (jmpd.eq.1) fdpd = xmpd * zphd               !! linear 
    2491                if (jmpd.eq.2) fdpd = xmpd * zphd * zphd        !! quadratic 
    2492                if (jmpd.eq.3) fdpd = xmpd * zphd * &           !! hyperbolic 
    2493                   (zphd / (xkphd + zphd)) 
    2494                if (jmpd.eq.4) fdpd = xmpd * zphd * &           !! sigmoid 
    2495                   ((zphd * zphd) / (xkphd + (zphd * zphd))) 
    2496                fdpds = fdpd * fsin 
    2497                !! 
    2498                !! microzooplankton 
    2499                if (jmzmi.eq.1) fdzmi = xmzmi * zzmi            !! linear 
    2500                if (jmzmi.eq.2) fdzmi = xmzmi * zzmi * zzmi     !! quadratic 
    2501                if (jmzmi.eq.3) fdzmi = xmzmi * zzmi * &        !! hyperbolic 
    2502                   (zzmi / (xkzmi + zzmi)) 
    2503                if (jmzmi.eq.4) fdzmi = xmzmi * zzmi * &        !! sigmoid 
    2504                   ((zzmi * zzmi) / (xkzmi + (zzmi * zzmi))) 
    2505                !! 
    2506                !! mesozooplankton 
    2507                if (jmzme.eq.1) fdzme = xmzme * zzme            !! linear 
    2508                if (jmzme.eq.2) fdzme = xmzme * zzme * zzme     !! quadratic 
    2509                if (jmzme.eq.3) fdzme = xmzme * zzme * &        !! hyperbolic 
    2510                   (zzme / (xkzme + zzme)) 
    2511                if (jmzme.eq.4) fdzme = xmzme * zzme * &        !! sigmoid 
    2512                   ((zzme * zzme) / (xkzme + (zzme * zzme))) 
    2513  
    2514                !!---------------------------------------------------------------------- 
    2515                !! Detritus remineralisation 
    2516                !! Constant or temperature-dependent 
    2517                !!---------------------------------------------------------------------- 
    2518                !! 
    2519                if (jmd.eq.1) then 
    2520                   !! temperature-dependent 
    2521                   fdd  = xmd  * fun_T * zdet 
    2522 # if defined key_roam 
    2523                   fddc = xmdc * fun_T * zdtc 
    2524 # endif 
    2525                elseif (jmd.eq.2) then 
    2526                   !! AXY (16/05/13): add in Q10-based parameterisation (def in nmlst) 
    2527                   !! temperature-dependent 
    2528                   fdd  = xmd  * fun_Q10 * zdet 
    2529 #if defined key_roam 
    2530                   fddc = xmdc * fun_Q10 * zdtc 
    2531 #endif 
    2532                else 
    2533                   !! temperature-independent 
    2534                   fdd  = xmd  * zdet 
    2535 # if defined key_roam 
    2536                   fddc = xmdc * zdtc 
    2537 # endif 
    2538                endif 
    2539                !! 
    2540                !! AXY (22/07/09): accelerate detrital remineralisation in the bottom box 
    2541                if ((jk.eq.jmbathy) .and. jsfd.eq.1) then 
    2542                   fdd  = 1.0  * zdet 
    2543 # if defined key_roam 
    2544                   fddc = 1.0  * zdtc 
    2545 # endif 
    2546                endif 
    2547                 
    2548 # if defined key_debug_medusa 
    2549                !! report plankton mortality and remineralisation 
    2550                if (idf.eq.1.AND.idfval.eq.1) then 
    2551                   IF (lwp) write (numout,*) '------------------------------' 
    2552                   IF (lwp) write (numout,*) 'fdpn2(',jk,') = ', fdpn2 
    2553                   IF (lwp) write (numout,*) 'fdpd2(',jk,') = ', fdpd2 
    2554                   IF (lwp) write (numout,*) 'fdpds2(',jk,')= ', fdpds2 
    2555                   IF (lwp) write (numout,*) 'fdzmi2(',jk,')= ', fdzmi2 
    2556                   IF (lwp) write (numout,*) 'fdzme2(',jk,')= ', fdzme2 
    2557                   IF (lwp) write (numout,*) 'fdpn(',jk,')  = ', fdpn 
    2558                   IF (lwp) write (numout,*) 'fdpd(',jk,')  = ', fdpd 
    2559                   IF (lwp) write (numout,*) 'fdpds(',jk,') = ', fdpds 
    2560                   IF (lwp) write (numout,*) 'fdzmi(',jk,') = ', fdzmi 
    2561                   IF (lwp) write (numout,*) 'fdzme(',jk,') = ', fdzme 
    2562                   IF (lwp) write (numout,*) 'fdd(',jk,')   = ', fdd 
    2563 #  if defined key_roam 
    2564                   IF (lwp) write (numout,*) 'fddc(',jk,')  = ', fddc 
    2565 #  endif 
    2566                endif 
    2567 # endif 
    2568  
    2569                !!---------------------------------------------------------------------- 
    2570                !! Detritus addition to benthos 
    2571                !! If activated, slow detritus in the bottom box will enter the 
    2572                !! benthic pool 
    2573                !!---------------------------------------------------------------------- 
    2574                !! 
    2575                if ((jk.eq.jmbathy) .and. jorgben.eq.1) then 
    2576                   !! this is the BOTTOM OCEAN BOX -> into the benthic pool! 
    2577                   !! 
    2578                   f_sbenin_n(ji,jj)  = (zdet * vsed * 86400.) 
    2579                   f_sbenin_fe(ji,jj) = (zdet * vsed * 86400. * xrfn) 
    2580 # if defined key_roam 
    2581                   f_sbenin_c(ji,jj)  = (zdtc * vsed * 86400.) 
    2582 # else 
    2583                   f_sbenin_c(ji,jj)  = (zdet * vsed * 86400. * xthetad) 
    2584 # endif 
    2585                endif 
    2586  
    2587                !!---------------------------------------------------------------------- 
    2588                !! Iron chemistry and fractionation 
    2589                !! following the Parekh et al. (2004) scheme adopted by the Met. 
    2590                !! Office, Medusa models total iron but considers "free" and 
    2591                !! ligand-bound forms for the purposes of scavenging (only "free" 
    2592                !! iron can be scavenged 
    2593                !!---------------------------------------------------------------------- 
    2594                !! 
    2595                !! total iron concentration (mmol Fe / m3 -> umol Fe / m3) 
    2596                xFeT        = zfer * 1.e3 
    2597                !! 
    2598                !! calculate fractionation (based on Diat-HadOCC; in turn based on Parekh et al., 2004) 
    2599                xb_coef_tmp = xk_FeL * (xLgT - xFeT) - 1.0 
    2600                xb2M4ac     = max(((xb_coef_tmp * xb_coef_tmp) + (4.0 * xk_FeL * xLgT)), 0.0) 
    2601                !! 
    2602                !! "free" ligand concentration 
    2603                xLgF        = 0.5 * (xb_coef_tmp + (xb2M4ac**0.5)) / xk_FeL 
    2604                !! 
    2605                !! ligand-bound iron concentration 
    2606                xFeL        = xLgT - xLgF 
    2607                !! 
    2608                !! "free" iron concentration (and convert to mmol Fe / m3) 
    2609                xFeF        = (xFeT - xFeL) * 1.e-3 
    2610                xFree(ji,jj)= xFeF / (zfer + tiny(zfer)) 
    2611                !! 
    2612                !! scavenging of iron (multiple schemes); I'm only really happy with the  
    2613                !! first one at the moment - the others involve assumptions (sometimes 
    2614                !! guessed at by me) that are potentially questionable 
    2615                !! 
    2616                if (jiron.eq.1) then 
    2617                   !!---------------------------------------------------------------------- 
    2618                   !! Scheme 1: Dutkiewicz et al. (2005) 
    2619                   !! This scheme includes a single scavenging term based solely on a 
    2620                   !! fixed rate and the availablility of "free" iron 
    2621                   !!---------------------------------------------------------------------- 
    2622                   !! 
    2623                   ffescav     = xk_sc_Fe * xFeF                     ! = mmol/m3/d 
    2624                   !! 
    2625                   !!---------------------------------------------------------------------- 
    2626                   !! 
    2627                   !! Mick's code contains a further (optional) implicit "scavenging" of  
    2628                   !! iron that sets an upper bound on "free" iron concentration, and  
    2629                   !! essentially caps the concentration of total iron as xFeL + "free"  
    2630                   !! iron; since the former is constrained by a fixed total ligand  
    2631                   !! concentration (= 1.0 umol/m3), and the latter isn't allowed above  
    2632                   !! this upper bound, total iron is constrained to a maximum of ... 
    2633                   !! 
    2634                   !!    xFeL + min(xFeF, 0.3 umol/m3) = 1.0 + 0.3 = 1.3 umol / m3 
    2635                   !!  
    2636                   !! In Mick's code, the actual value of total iron is reset to this 
    2637                   !! sum (i.e. TFe = FeL + Fe'; but Fe' <= 0.3 umol/m3); this isn't 
    2638                   !! our favoured approach to tracer updating here (not least because 
    2639                   !! of the leapfrog), so here the amount scavenged is augmented by an 
    2640                   !! additional amount that serves to drag total iron back towards that 
    2641                   !! expected from this limitation on iron concentration ... 
    2642                   !! 
    2643                   xmaxFeF     = min((xFeF * 1.e3), 0.3)             ! = umol/m3 
    2644                   !! 
    2645                   !! Here, the difference between current total Fe and (FeL + Fe') is 
    2646                   !! calculated and added to the scavenging flux already calculated 
    2647                   !! above ... 
    2648                   !! 
    2649                   fdeltaFe    = (xFeT - (xFeL + xmaxFeF)) * 1.e-3   ! = mmol/m3 
    2650                   !! 
    2651                   !! This assumes that the "excess" iron is dissipated with a time- 
    2652                   !! scale of 1 day; seems reasonable to me ... (famous last words) 
    2653                   !! 
    2654                   ffescav     = ffescav + fdeltaFe                  ! = mmol/m3/d 
    2655                   !! 
    2656 # if defined key_deep_fe_fix 
    2657                   !! AXY (17/01/13) 
    2658                   !! stop scavenging for iron concentrations below 0.5 umol / m3 
    2659                   !! at depths greater than 1000 m; this aims to end MEDUSA's 
    2660                   !! continual loss of iron at depth without impacting things 
    2661                   !! at the surface too much; the justification for this is that 
    2662                   !! it appears to be what Mick Follows et al. do in their work 
    2663                   !! (as evidenced by the iron initial condition they supplied 
    2664                   !! me with); to be honest, it looks like Follow et al. do this 
    2665                   !! at shallower depths than 1000 m, but I'll stick with this 
    2666                   !! for now; I suspect that this seemingly arbitrary approach 
    2667                   !! effectively "parameterises" the particle-based scavenging 
    2668                   !! rates that other models use (i.e. at depth there are no 
    2669                   !! sinking particles, so scavenging stops); it might be fun 
    2670                   !! justifying this in a paper though! 
    2671                   !! 
    2672                   if ((fdep.gt.1000.) .and. (xFeT.lt.0.5)) then 
    2673                      ffescav = 0. 
    2674                   endif 
    2675 # endif 
    2676                   !! 
    2677                elseif (jiron.eq.2) then 
    2678                   !!---------------------------------------------------------------------- 
    2679                   !! Scheme 2: Moore et al. (2004) 
    2680                   !! This scheme includes a single scavenging term that accounts for 
    2681                   !! both suspended and sinking particles in the water column; this 
    2682                   !! term scavenges total iron rather than "free" iron 
    2683                   !!---------------------------------------------------------------------- 
    2684                   !! 
    2685                   !! total iron concentration (mmol Fe / m3 -> umol Fe / m3) 
    2686                   xFeT        = zfer * 1.e3 
    2687                   !! 
    2688                   !! this has a base scavenging rate (12% / y) which is modified by local 
    2689                   !! particle concentration and sinking flux (and dust - but I'm ignoring 
    2690                   !! that here for now) and which is accelerated when Fe concentration gets 
    2691                   !! 0.6 nM (= 0.6 umol/m3 = 0.0006 mmol/m3), and decreased as concentrations 
    2692                   !! below 0.4 nM (= 0.4 umol/m3 = 0.0004 mmol/m3) 
    2693                   !! 
    2694                   !! base scavenging rate (0.12 / y) 
    2695                   fbase_scav = 0.12 / 365.25 
    2696                   !! 
    2697                   !! calculate sinking particle part of scaling factor 
    2698                   !! this takes local fast sinking carbon (mmol C / m2 / d) and 
    2699                   !! gets it into nmol C / cm3 / s ("rdt" below is the number of seconds in 
    2700                   !! a model timestep) 
    2701                   !! 
    2702                   !! fscal_sink = ffastc(ji,jj) * 1.e2 / (86400.) 
    2703                   !! 
    2704                   !! ... actually, re-reading Moore et al.'s equations, it looks like he uses 
    2705                   !! his sinking flux directly, without scaling it by time-step or anything, 
    2706                   !! so I'll copy this here ... 
    2707                   !! 
    2708                   fscal_sink = ffastc(ji,jj) * 1.e2 
    2709                   !! 
    2710                   !! calculate particle part of scaling factor 
    2711                   !! this totals up the carbon in suspended particles (Pn, Pd, Zmi, Zme, D), 
    2712                   !! which comes out in mmol C / m3 (= nmol C / cm3), and then multiplies it 
    2713                   !! by a magic factor, 0.002, to get it into nmol C / cm2 / s 
    2714                   !! 
    2715                   fscal_part = ((xthetapn * zphn) + (xthetapd * zphd) + (xthetazmi * zzmi) + & 
    2716                   (xthetazme * zzme) + (xthetad * zdet)) * 0.002 
    2717                   !! 
    2718                   !! calculate scaling factor for base scavenging rate 
    2719                   !! this uses the (now correctly scaled) sinking flux and standing 
    2720                   !! particle concentration, divides through by some sort of reference 
    2721                   !! value (= 0.0066 nmol C / cm2 / s) and then uses this, or not if its 
    2722                   !! too high, to rescale the base scavenging rate 
    2723                   !! 
    2724                   fscal_scav = fbase_scav * min(((fscal_sink + fscal_part) / 0.0066), 4.0) 
    2725                   !! 
    2726                   !! the resulting scavenging rate is then scaled further according to the 
    2727                   !! local iron concentration (i.e. diminished in low iron regions; enhanced 
    2728                   !! in high iron regions; less alone in intermediate iron regions) 
    2729                   !! 
    2730                   if (xFeT.lt.0.4) then 
    2731                      !! 
    2732                      !! low iron region 
    2733                      !! 
    2734                      fscal_scav = fscal_scav * (xFeT / 0.4) 
    2735                      !! 
    2736                   elseif (xFeT.gt.0.6) then 
    2737                      !! 
    2738                      !! high iron region 
    2739                      !! 
    2740                      fscal_scav = fscal_scav + ((xFeT / 0.6) * (6.0 / 1.4)) 
    2741                      !! 
    2742                   else 
    2743                      !! 
    2744                      !! intermediate iron region: do nothing 
    2745                      !! 
    2746                   endif 
    2747                   !!  
    2748                   !! apply the calculated scavenging rate ... 
    2749                   !! 
    2750                   ffescav = fscal_scav * zfer 
    2751                   !! 
    2752                elseif (jiron.eq.3) then 
    2753                   !!---------------------------------------------------------------------- 
    2754                   !! Scheme 3: Moore et al. (2008) 
    2755                   !! This scheme includes a single scavenging term that accounts for 
    2756                   !! sinking particles in the water column, and includes organic C, 
    2757                   !! biogenic opal, calcium carbonate and dust in this (though the 
    2758                   !! latter is ignored here until I work out what units the incoming 
    2759                   !! "dust" flux is in); this term scavenges total iron rather than  
    2760                   !! "free" iron 
    2761                   !!---------------------------------------------------------------------- 
    2762                   !! 
    2763                   !! total iron concentration (mmol Fe / m3 -> umol Fe / m3) 
    2764                   xFeT        = zfer * 1.e3 
    2765                   !! 
    2766                   !! this has a base scavenging rate which is modified by local 
    2767                   !! particle sinking flux (including dust - but I'm ignoring that  
    2768                   !! here for now) and which is accelerated when Fe concentration 
    2769                   !! is > 0.6 nM (= 0.6 umol/m3 = 0.0006 mmol/m3), and decreased as  
    2770                   !! concentrations < 0.5 nM (= 0.5 umol/m3 = 0.0005 mmol/m3) 
    2771                   !! 
    2772                   !! base scavenging rate (Fe_b in paper; units may be wrong there) 
    2773                   fbase_scav = 0.00384 ! (ng)^-1 cm 
    2774                   !! 
    2775                   !! calculate sinking particle part of scaling factor; this converts 
    2776                   !! mmol / m2 / d fluxes of organic carbon, silicon and calcium 
    2777                   !! carbonate into ng / cm2 / s fluxes; it is assumed here that the 
    2778                   !! mass conversions simply consider the mass of the main element 
    2779                   !! (C, Si and Ca) and *not* the mass of the molecules that they are 
    2780                   !! part of; Moore et al. (2008) is unclear on the conversion that 
    2781                   !! should be used 
    2782                   !! 
    2783                   !! milli -> nano; mol -> gram; /m2 -> /cm2; /d -> /s 
    2784                   fscal_csink  = (ffastc(ji,jj)  * 1.e6 * xmassc  * 1.e-4 / 86400.)      ! ng C  / cm2 / s 
    2785                   fscal_sisink = (ffastsi(ji,jj) * 1.e6 * xmasssi * 1.e-4 / 86400.)      ! ng Si / cm2 / s 
    2786                   fscal_casink = (ffastca(ji,jj) * 1.e6 * xmassca * 1.e-4 / 86400.)      ! ng Ca / cm2 / s 
    2787                   !!  
    2788                   !! sum up these sinking fluxes and convert to ng / cm by dividing 
    2789                   !! through by a sinking rate of 100 m / d = 1.157 cm / s 
    2790                   fscal_sink   = ((fscal_csink * 6.) + fscal_sisink + fscal_casink) / & 
    2791                   (100. * 1.e3 / 86400)                                                  ! ng / cm 
    2792                   !! 
    2793                   !! now calculate the scavenging rate based upon the base rate and 
    2794                   !! this particle flux scaling; according to the published units, 
    2795                   !! the result actually has *no* units, but as it must be expressed 
    2796                   !! per unit time for it to make any sense, I'm assuming a missing 
    2797                   !! "per second" 
    2798                   fscal_scav = fbase_scav * fscal_sink                                   ! / s 
    2799                   !! 
    2800                   !! the resulting scavenging rate is then scaled further according to the 
    2801                   !! local iron concentration (i.e. diminished in low iron regions; enhanced 
    2802                   !! in high iron regions; less alone in intermediate iron regions) 
    2803                   !! 
    2804                   if (xFeT.lt.0.5) then 
    2805                      !! 
    2806                      !! low iron region (0.5 instead of the 0.4 in Moore et al., 2004) 
    2807                      !! 
    2808                      fscal_scav = fscal_scav * (xFeT / 0.5) 
    2809                      !! 
    2810                   elseif (xFeT.gt.0.6) then 
    2811                      !! 
    2812                      !! high iron region (functional form different in Moore et al., 2004) 
    2813                      !! 
    2814                      fscal_scav = fscal_scav + ((xFeT - 0.6) * 0.00904) 
    2815                      !! 
    2816                   else 
    2817                      !! 
    2818                      !! intermediate iron region: do nothing 
    2819                      !! 
    2820                   endif 
    2821                   !!  
    2822                   !! apply the calculated scavenging rate ... 
    2823                   !! 
    2824                   ffescav = fscal_scav * zfer 
    2825                   !! 
    2826                elseif (jiron.eq.4) then 
    2827                   !!---------------------------------------------------------------------- 
    2828                   !! Scheme 4: Galbraith et al. (2010) 
    2829                   !! This scheme includes two scavenging terms, one for organic, 
    2830                   !! particle-based scavenging, and another for inorganic scavenging; 
    2831                   !! both terms scavenge "free" iron only 
    2832                   !!---------------------------------------------------------------------- 
    2833                   !! 
    2834                   !! Galbraith et al. (2010) present a more straightforward outline of  
    2835                   !! the scheme in Parekh et al. (2005) ... 
    2836                   !!  
    2837                   !! sinking particulate carbon available for scavenging 
    2838                   !! this assumes a sinking rate of 100 m / d (Moore & Braucher, 2008), 
    2839                   xCscav1     = (ffastc(ji,jj) * xmassc) / 100. ! = mg C / m3 
    2840                   !!  
    2841                   !! scale by Honeyman et al. (1981) exponent coefficient 
    2842                   !! multiply by 1.e-3 to express C flux in g C rather than mg C 
    2843                   xCscav2     = (xCscav1 * 1.e-3)**0.58 
    2844                   !! 
    2845                   !! multiply by Galbraith et al. (2010) scavenging rate 
    2846                   xk_org      = 0.5 ! ((g C m/3)^-1) / d 
    2847                   xORGscav    = xk_org * xCscav2 * xFeF 
    2848                   !! 
    2849                   !! Galbraith et al. (2010) also include an inorganic bit ... 
    2850                   !!  
    2851                   !! this occurs at a fixed rate, again based on the availability of 
    2852                   !! "free" iron 
    2853                   !! 
    2854                   !! k_inorg  = 1000 d**-1 nmol Fe**-0.5 kg**-0.5 
    2855                   !! 
    2856                   !! to implement this here, scale xFeF by 1026 to put in units of 
    2857                   !! umol/m3 which approximately equal nmol/kg 
    2858                   !! 
    2859                   xk_inorg    = 1000. ! ((nmol Fe / kg)^1.5) 
    2860                   xINORGscav  = (xk_inorg * (xFeF * 1026.)**1.5) * 1.e-3 
    2861                   !! 
    2862                   !! sum these two terms together 
    2863                   ffescav     = xORGscav + xINORGscav 
    2864                else 
    2865                   !!---------------------------------------------------------------------- 
    2866                   !! No Scheme: you coward! 
    2867                   !! This scheme puts its head in the sand and eskews any decision about 
    2868                   !! how iron is removed from the ocean; prepare to get deluged in iron 
    2869                   !! you fool! 
    2870                   !!---------------------------------------------------------------------- 
    2871                   ffescav     = 0. 
    2872                endif 
    2873  
    2874                !!---------------------------------------------------------------------- 
    2875                !! Other iron cycle processes 
    2876                !!---------------------------------------------------------------------- 
    2877                !! 
    2878                !! aeolian iron deposition 
    2879                if (jk.eq.1) then 
    2880                   !! zirondep   is in mmol-Fe / m2 / day 
    2881                   !! ffetop     is in mmol-dissolved-Fe / m3 / day 
    2882                   ffetop  = zirondep(ji,jj) * xfe_sol / fthk  
    2883                else 
    2884                   ffetop  = 0.0 
    2885                endif 
    2886                !! 
    2887                !! seafloor iron addition 
    2888                !! AXY (10/07/12): amended to only apply sedimentary flux up to ~500 m down 
    2889                !! if (jk.eq.(mbathy(ji,jj)-1).AND.jk.lt.i1100) then 
    2890                if ((jk.eq.jmbathy).AND.jk.le.i0500) then 
    2891                   !! Moore et al. (2004) cite a coastal California value of 5 umol/m2/d, but adopt a 
    2892                   !! global value of 2 umol/m2/d for all areas < 1100 m; here we use this latter value 
    2893                   !! but apply it everywhere 
    2894                   !! AXY (21/07/09): actually, let's just apply it below 1100 m (levels 1-37) 
    2895                   ffebot  = (xfe_sed / fthk) 
    2896                else 
    2897                   ffebot  = 0.0 
    2898                endif 
    2899  
    2900                !! AXY (16/12/09): remove iron addition/removal processes 
    2901                !! For the purposes of the quarter degree run, the iron cycle is being pegged to the 
    2902                !! initial condition supplied by Mick Follows via restoration with a 30 day period; 
    2903                !! iron addition at the seafloor is still permitted with the idea that this extra 
    2904                !! iron will be removed by the restoration away from the source 
    2905                !! ffescav = 0.0 
    2906                !! ffetop  = 0.0 
    2907                !! ffebot  = 0.0 
    2908  
    2909 # if defined key_debug_medusa 
    2910                !! report miscellaneous calculations 
    2911                if (idf.eq.1.AND.idfval.eq.1) then 
    2912                   IF (lwp) write (numout,*) '------------------------------' 
    2913                   IF (lwp) write (numout,*) 'xfe_sol  = ', xfe_sol 
    2914                   IF (lwp) write (numout,*) 'xfe_mass = ', xfe_mass 
    2915                   IF (lwp) write (numout,*) 'ffetop(',jk,')  = ', ffetop 
    2916                   IF (lwp) write (numout,*) 'ffebot(',jk,')  = ', ffebot 
    2917                   IF (lwp) write (numout,*) 'xFree(',jk,')   = ', xFree(ji,jj) 
    2918                   IF (lwp) write (numout,*) 'ffescav(',jk,') = ', ffescav 
    2919                endif 
    2920 # endif 
    2921  
    2922                !!---------------------------------------------------------------------- 
    2923                !! Miscellaneous 
    2924                !!---------------------------------------------------------------------- 
    2925                !! 
    2926                !! diatom frustule dissolution 
    2927                fsdiss  = xsdiss * zpds 
    2928  
    2929 # if defined key_debug_medusa 
    2930                !! report miscellaneous calculations 
    2931                if (idf.eq.1.AND.idfval.eq.1) then 
    2932                   IF (lwp) write (numout,*) '------------------------------' 
    2933                   IF (lwp) write (numout,*) 'fsdiss(',jk,')  = ', fsdiss 
    2934                endif 
    2935 # endif 
    2936  
    2937                !!---------------------------------------------------------------------- 
    2938                !! Slow detritus creation 
    2939                !!---------------------------------------------------------------------- 
    2940                !! this variable integrates the creation of slow sinking detritus 
    2941                !! to allow the split between fast and slow detritus to be  
    2942                !! diagnosed 
    2943                fslown  = fdpn + fdzmi + ((1.0 - xfdfrac1) * fdpd) + & 
    2944                ((1.0 - xfdfrac2) * fdzme) + ((1.0 - xbetan) * (finmi + finme)) 
    2945                !! 
    2946                !! this variable records the slow detrital sinking flux at this 
    2947                !! particular depth; it is used in the output of this flux at 
    2948                !! standard depths in the diagnostic outputs; needs to be 
    2949                !! adjusted from per second to per day because of parameter vsed 
    2950                fslownflux(ji,jj) = zdet * vsed * 86400. 
    2951 # if defined key_roam 
    2952                !! 
    2953                !! and the same for detrital carbon 
    2954                fslowc  = (xthetapn * fdpn) + (xthetazmi * fdzmi) + & 
    2955                (xthetapd * (1.0 - xfdfrac1) * fdpd) + & 
    2956                (xthetazme * (1.0 - xfdfrac2) * fdzme) + & 
    2957                ((1.0 - xbetac) * (ficmi + ficme)) 
    2958                !! 
    2959                !! this variable records the slow detrital sinking flux at this 
    2960                !! particular depth; it is used in the output of this flux at 
    2961                !! standard depths in the diagnostic outputs; needs to be 
    2962                !! adjusted from per second to per day because of parameter vsed 
    2963                fslowcflux(ji,jj) = zdtc * vsed * 86400. 
    2964 # endif 
    2965  
    2966                !!---------------------------------------------------------------------- 
    2967                !! Nutrient regeneration 
    2968                !! this variable integrates total nitrogen regeneration down the 
    2969                !! watercolumn; its value is stored and output as a 2D diagnostic; 
    2970                !! the corresponding dissolution flux of silicon (from sources 
    2971                !! other than fast detritus) is also integrated; note that, 
    2972                !! confusingly, the linear loss terms from plankton compartments 
    2973                !! are labelled as fdX2 when one might have expected fdX or fdX1 
    2974                !!---------------------------------------------------------------------- 
    2975                !! 
    2976                !! nitrogen 
    2977                fregen   = (( (xphi * (fgmipn + fgmid)) +                &  ! messy feeding 
    2978                (xphi * (fgmepn + fgmepd + fgmezmi + fgmed)) +           &  ! messy feeding 
    2979                fmiexcr + fmeexcr + fdd +                                &  ! excretion + D remin. 
    2980                fdpn2 + fdpd2 + fdzmi2 + fdzme2) * fthk)                    ! linear mortality 
    2981                !! 
    2982                !! silicon 
    2983                fregensi = (( fsdiss + ((1.0 - xfdfrac1) * fdpds) +      &  ! dissolution + non-lin. mortality 
    2984                ((1.0 - xfdfrac3) * fgmepds) +                           &  ! egestion by zooplankton 
    2985                fdpds2) * fthk)                                             ! linear mortality 
    2986 # if defined key_roam 
    2987                !! 
    2988                !! carbon 
    2989                fregenc  = (( (xphi * ((xthetapn * fgmipn) + fgmidc)) +  &  ! messy feeding 
    2990                (xphi * ((xthetapn * fgmepn) + (xthetapd * fgmepd) +     &  ! messy feeding 
    2991                (xthetazmi * fgmezmi) + fgmedc)) +                       &  ! messy feeding 
    2992                fmiresp + fmeresp + fddc +                               &  ! respiration + D remin. 
    2993                (xthetapn * fdpn2) + (xthetapd * fdpd2) +                &  ! linear mortality 
    2994                (xthetazmi * fdzmi2) + (xthetazme * fdzme2)) * fthk)        ! linear mortality 
    2995 # endif 
    2996  
    2997                !!---------------------------------------------------------------------- 
    2998                !! Fast-sinking detritus terms 
    2999                !! "local" variables declared so that conservation can be checked; 
    3000                !! the calculated terms are added to the fast-sinking flux later on 
    3001                !! only after the flux entering this level has experienced some 
    3002                !! remineralisation 
    3003                !! note: these fluxes need to be scaled by the level thickness 
    3004                !!---------------------------------------------------------------------- 
    3005                !! 
    3006                !! nitrogen:   diatom and mesozooplankton mortality 
    3007                ftempn         = b0 * ((xfdfrac1 * fdpd)  + (xfdfrac2 * fdzme)) 
    3008                !! 
    3009                !! silicon:    diatom mortality and grazed diatoms 
    3010                ftempsi        = b0 * ((xfdfrac1 * fdpds) + (xfdfrac3 * fgmepds)) 
    3011                !! 
    3012                !! iron:       diatom and mesozooplankton mortality 
    3013                ftempfe        = b0 * (((xfdfrac1 * fdpd) + (xfdfrac2 * fdzme)) * xrfn) 
    3014                !! 
    3015                !! carbon:     diatom and mesozooplankton mortality 
    3016                ftempc         = b0 * ((xfdfrac1 * xthetapd * fdpd) + &  
    3017                                 (xfdfrac2 * xthetazme * fdzme)) 
    3018                !! 
    3019 # if defined key_roam 
    3020                if (jrratio.eq.0) then 
    3021                   !! CaCO3:      latitudinally-based fraction of total primary production 
    3022                   !!               absolute latitude of current grid cell 
    3023                   flat           = abs(gphit(ji,jj)) 
    3024                   !!               0.10 at equator; 0.02 at pole 
    3025                   fcaco3         = xcaco3a + ((xcaco3b - xcaco3a) * ((90.0 - flat) / 90.0)) 
    3026                elseif (jrratio.eq.1) then 
    3027                   !! CaCO3:      Ridgwell et al. (2007) submodel, version 1 
    3028                   !!             this uses SURFACE omega calcite to regulate rain ratio 
    3029                   if (f_omcal(ji,jj).ge.1.0) then 
    3030                      fq1 = (f_omcal(ji,jj) - 1.0)**0.81 
    3031                   else 
    3032                      fq1 = 0. 
    3033                   endif 
    3034                   fcaco3 = xridg_r0 * fq1 
    3035                elseif (jrratio.eq.2) then 
    3036                   !! CaCO3:      Ridgwell et al. (2007) submodel, version 2 
    3037                   !!             this uses FULL 3D omega calcite to regulate rain ratio 
    3038                   if (f3_omcal(ji,jj,jk).ge.1.0) then 
    3039                      fq1 = (f3_omcal(ji,jj,jk) - 1.0)**0.81 
    3040                   else 
    3041                      fq1 = 0. 
    3042                   endif 
    3043                   fcaco3 = xridg_r0 * fq1 
    3044                endif 
    3045 # else 
    3046                !! CaCO3:      latitudinally-based fraction of total primary production 
    3047                !!               absolute latitude of current grid cell 
    3048                flat           = abs(gphit(ji,jj)) 
    3049                !!               0.10 at equator; 0.02 at pole 
    3050                fcaco3         = xcaco3a + ((xcaco3b - xcaco3a) * ((90.0 - flat) / 90.0)) 
    3051 # endif 
    3052                !! AXY (09/03/09): convert CaCO3 production from function of  
    3053                !! primary production into a function of fast-sinking material;  
    3054                !! technically, this is what Dunne et al. (2007) do anyway; they  
    3055                !! convert total primary production estimated from surface  
    3056                !! chlorophyll to an export flux for which they apply conversion  
    3057                !! factors to estimate the various elemental fractions (Si, Ca) 
    3058                ftempca        = ftempc * fcaco3 
    3059  
    3060 # if defined key_debug_medusa 
    3061                !! integrate total fast detritus production 
    3062                if (idf.eq.1) then 
    3063                   fifd_n(ji,jj)  = fifd_n(ji,jj)  + (ftempn  * fthk) 
    3064                   fifd_si(ji,jj) = fifd_si(ji,jj) + (ftempsi * fthk) 
    3065                   fifd_fe(ji,jj) = fifd_fe(ji,jj) + (ftempfe * fthk) 
    3066 #  if defined key_roam 
    3067                   fifd_c(ji,jj)  = fifd_c(ji,jj)  + (ftempc  * fthk) 
    3068 #  endif 
    3069                endif 
    3070  
    3071                !! report quantities of fast-sinking detritus for each component 
    3072                if (idf.eq.1.AND.idfval.eq.1) then 
    3073                   IF (lwp) write (numout,*) '------------------------------' 
    3074                   IF (lwp) write (numout,*) 'fdpd(',jk,')    = ', fdpd 
    3075                   IF (lwp) write (numout,*) 'fdzme(',jk,')   = ', fdzme 
    3076                   IF (lwp) write (numout,*) 'ftempn(',jk,')  = ', ftempn 
    3077                   IF (lwp) write (numout,*) 'ftempsi(',jk,') = ', ftempsi 
    3078                   IF (lwp) write (numout,*) 'ftempfe(',jk,') = ', ftempfe 
    3079                   IF (lwp) write (numout,*) 'ftempc(',jk,')  = ', ftempc 
    3080                   IF (lwp) write (numout,*) 'ftempca(',jk,') = ', ftempca 
    3081                   IF (lwp) write (numout,*) 'flat(',jk,')    = ', flat 
    3082                   IF (lwp) write (numout,*) 'fcaco3(',jk,')  = ', fcaco3 
    3083                endif 
    3084 # endif 
    3085  
    3086                !!---------------------------------------------------------------------- 
    3087                !! This version of MEDUSA offers a choice of three methods for 
    3088                !! handling the remineralisation of fast detritus.  All three 
    3089                !! do so in broadly the same way: 
    3090                !! 
    3091                !!   1.  Fast detritus is stored as a 2D array                   [ ffastX  ] 
    3092                !!   2.  Fast detritus is added level-by-level                   [ ftempX  ] 
    3093                !!   3.  Fast detritus is not remineralised in the top box       [ freminX ] 
    3094                !!   4.  Remaining fast detritus is remineralised in the bottom  [ fsedX   ] 
    3095                !!       box 
    3096                !! 
    3097                !! The three remineralisation methods are: 
    3098                !!    
    3099                !!   1.  Ballast model (i.e. that published in Yool et al., 2011) 
    3100                !!  (1b. Ballast-sans-ballast model) 
    3101                !!   2.  Martin et al. (1987) 
    3102                !!   3.  Henson et al. (2011) 
    3103                !!  
    3104                !! The first of these couples C, N and Fe remineralisation to 
    3105                !! the remineralisation of particulate Si and CaCO3, but the  
    3106                !! latter two treat remineralisation of C, N, Fe, Si and CaCO3 
    3107                !! completely separately.  At present a switch within the code 
    3108                !! regulates which submodel is used, but this should be moved 
    3109                !! to the namelist file. 
    3110                !!  
    3111                !! The ballast-sans-ballast submodel is an original development 
    3112                !! feature of MEDUSA in which the ballast submodel's general 
    3113                !! framework and parameterisation is used, but in which there 
    3114                !! is no protection of organic material afforded by ballasting 
    3115                !! minerals.  While similar, it is not the same as the Martin  
    3116                !! et al. (1987) submodel. 
    3117                !! 
    3118                !! Since the three submodels behave the same in terms of 
    3119                !! accumulating sinking material and remineralising it all at 
    3120                !! the seafloor, these portions of the code below are common to 
    3121                !! all three. 
    3122                !!---------------------------------------------------------------------- 
    3123  
    3124                if (jexport.eq.1) then 
    3125                   !!====================================================================== 
    3126                   !! BALLAST SUBMODEL 
    3127                   !!====================================================================== 
    3128                   !!  
    3129                   !!---------------------------------------------------------------------- 
    3130                   !! Fast-sinking detritus fluxes, pt. 1: REMINERALISATION 
    3131                   !! aside from explicitly modelled, slow-sinking detritus, the 
    3132                   !! model includes an implicit representation of detrital 
    3133                   !! particles that sink too quickly to be modelled with 
    3134                   !! explicit state variables; this sinking flux is instead 
    3135                   !! instantaneously remineralised down the water column using 
    3136                   !! the version of Armstrong et al. (2002)'s ballast model 
    3137                   !! used by Dunne et al. (2007); the version of this model 
    3138                   !! here considers silicon and calcium carbonate ballast 
    3139                   !! minerals; this section of the code redistributes the fast 
    3140                   !! sinking material generated locally down the water column; 
    3141                   !! this differs from Dunne et al. (2007) in that fast sinking 
    3142                   !! material is distributed at *every* level below that it is 
    3143                   !! generated, rather than at every level below some fixed 
    3144                   !! depth; this scheme is also different in that sinking material  
    3145                   !! generated in one level is aggregated with that generated by 
    3146                   !! shallower levels; this should make the ballast model more 
    3147                   !! self-consistent (famous last words) 
    3148                   !!---------------------------------------------------------------------- 
    3149                   !! 
    3150                   if (jk.eq.1) then 
    3151                      !! this is the SURFACE OCEAN BOX (no remineralisation) 
    3152                      !! 
    3153                      freminc  = 0.0 
    3154                      freminn  = 0.0 
    3155                      freminfe = 0.0 
    3156                      freminsi = 0.0 
    3157                      freminca = 0.0 
    3158                   elseif (jk.le.jmbathy) then 
    3159                      !! this is an OCEAN BOX (remineralise some material) 
    3160                      !! 
    3161                      !! set up CCD depth to be used depending on user choice 
    3162                      if (jocalccd.eq.0) then 
    3163                         !! use default CCD field 
    3164                         fccd_dep = ocal_ccd(ji,jj) 
    3165                      elseif (jocalccd.eq.1) then 
    3166                         !! use calculated CCD field 
    3167                         fccd_dep = f2_ccd_cal(ji,jj) 
    3168                      endif 
    3169                      !! 
    3170                      !! === organic carbon === 
    3171                      fq0      = ffastc(ji,jj)                        !! how much organic C enters this box        (mol) 
    3172                      if (iball.eq.1) then 
    3173                         fq1      = (fq0 * xmassc)                    !! how much it weighs                        (mass) 
    3174                         fq2      = (ffastca(ji,jj) * xmassca)        !! how much CaCO3 enters this box            (mass) 
    3175                         fq3      = (ffastsi(ji,jj) * xmasssi)        !! how much  opal enters this box            (mass) 
    3176                         fq4      = (fq2 * xprotca) + (fq3 * xprotsi) !! total protected organic C                 (mass) 
    3177                         !! this next term is calculated for C but used for N and Fe as well 
    3178                         !! it needs to be protected in case ALL C is protected 
    3179                         if (fq4.lt.fq1) then 
    3180                            fprotf   = (fq4 / (fq1 + tiny(fq1)))      !! protected fraction of total organic C     (non-dim) 
    3181                         else 
    3182                            fprotf   = 1.0                            !! all organic C is protected                (non-dim) 
    3183                         endif 
    3184                         fq5      = (1.0 - fprotf)                    !! unprotected fraction of total organic C   (non-dim) 
    3185                         fq6      = (fq0 * fq5)                       !! how much organic C is unprotected         (mol) 
    3186                         fq7      = (fq6 * exp(-(fthk / xfastc)))     !! how much unprotected C leaves this box    (mol) 
    3187                         fq8      = (fq7 + (fq0 * fprotf))            !! how much total C leaves this box          (mol) 
    3188                         freminc  = (fq0 - fq8) / fthk                !! C remineralisation in this box            (mol) 
    3189                         ffastc(ji,jj) = fq8                           
    3190 # if defined key_debug_medusa 
    3191                         !! report in/out/remin fluxes of carbon for this level 
    3192                            if (idf.eq.1.AND.idfval.eq.1) then 
    3193                               IF (lwp) write (numout,*) '------------------------------' 
    3194                               IF (lwp) write (numout,*) 'totalC(',jk,')  = ', fq1 
    3195                               IF (lwp) write (numout,*) 'prtctC(',jk,')  = ', fq4 
    3196                               IF (lwp) write (numout,*) 'fprotf(',jk,')  = ', fprotf 
    3197                               IF (lwp) write (numout,*) '------------------------------' 
    3198                               IF (lwp) write (numout,*) 'IN   C(',jk,')  = ', fq0 
    3199                               IF (lwp) write (numout,*) 'LOST C(',jk,')  = ', freminc * fthk 
    3200                               IF (lwp) write (numout,*) 'OUT  C(',jk,')  = ', fq8 
    3201                               IF (lwp) write (numout,*) 'NEW  C(',jk,')  = ', ftempc * fthk 
    3202                            endif 
    3203 # endif 
    3204                         else 
    3205                         fq1      = fq0 * exp(-(fthk / xfastc))       !! how much organic C leaves this box        (mol) 
    3206                         freminc  = (fq0 - fq1) / fthk                !! C remineralisation in this box            (mol) 
    3207                         ffastc(ji,jj)  = fq1 
    3208                      endif 
    3209                      !! 
    3210                      !! === organic nitrogen === 
    3211                      fq0      = ffastn(ji,jj)                        !! how much organic N enters this box        (mol) 
    3212                      if (iball.eq.1) then 
    3213                         fq5      = (1.0 - fprotf)                    !! unprotected fraction of total organic N   (non-dim) 
    3214                         fq6      = (fq0 * fq5)                       !! how much organic N is unprotected         (mol) 
    3215                         fq7      = (fq6 * exp(-(fthk / xfastc)))     !! how much unprotected N leaves this box    (mol) 
    3216                         fq8      = (fq7 + (fq0 * fprotf))            !! how much total N leaves this box          (mol) 
    3217                         freminn  = (fq0 - fq8) / fthk                !! N remineralisation in this box            (mol) 
    3218                         ffastn(ji,jj)  = fq8 
    3219 # if defined key_debug_medusa 
    3220                         !! report in/out/remin fluxes of carbon for this level 
    3221                         if (idf.eq.1.AND.idfval.eq.1) then 
    3222                            IF (lwp) write (numout,*) '------------------------------' 
    3223                            IF (lwp) write (numout,*) 'totalN(',jk,')  = ', fq1 
    3224                            IF (lwp) write (numout,*) 'prtctN(',jk,')  = ', fq4 
    3225                            IF (lwp) write (numout,*) 'fprotf(',jk,')  = ', fprotf 
    3226                            IF (lwp) write (numout,*) '------------------------------' 
    3227                            if (freminn < 0.0) then 
    3228                               IF (lwp) write (numout,*) '** FREMIN ERROR **' 
    3229                            endif 
    3230                            IF (lwp) write (numout,*) 'IN   N(',jk,')  = ', fq0 
    3231                            IF (lwp) write (numout,*) 'LOST N(',jk,')  = ', freminn * fthk 
    3232                            IF (lwp) write (numout,*) 'OUT  N(',jk,')  = ', fq8 
    3233                            IF (lwp) write (numout,*) 'NEW  N(',jk,')  = ', ftempn * fthk 
    3234                         endif 
    3235 # endif 
    3236                      else 
    3237                         fq1      = fq0 * exp(-(fthk / xfastc))       !! how much organic N leaves this box        (mol) 
    3238                         freminn  = (fq0 - fq1) / fthk                !! N remineralisation in this box            (mol) 
    3239                         ffastn(ji,jj)  = fq1 
    3240                      endif 
    3241                      !! 
    3242                      !! === organic iron === 
    3243                      fq0      = ffastfe(ji,jj)                       !! how much organic Fe enters this box       (mol) 
    3244                      if (iball.eq.1) then 
    3245                         fq5      = (1.0 - fprotf)                    !! unprotected fraction of total organic Fe  (non-dim) 
    3246                         fq6      = (fq0 * fq5)                       !! how much organic Fe is unprotected        (mol) 
    3247                         fq7      = (fq6 * exp(-(fthk / xfastc)))     !! how much unprotected Fe leaves this box   (mol) 
    3248                         fq8      = (fq7 + (fq0 * fprotf))            !! how much total Fe leaves this box         (mol)             
    3249                         freminfe = (fq0 - fq8) / fthk                !! Fe remineralisation in this box           (mol) 
    3250                         ffastfe(ji,jj) = fq8 
    3251                      else 
    3252                         fq1      = fq0 * exp(-(fthk / xfastc))       !! how much total Fe leaves this box         (mol)       
    3253                         freminfe = (fq0 - fq1) / fthk                !! Fe remineralisation in this box           (mol) 
    3254                         ffastfe(ji,jj) = fq1 
    3255                      endif 
    3256                      !! 
    3257                      !! === biogenic silicon === 
    3258                      fq0      = ffastsi(ji,jj)                       !! how much  opal centers this box           (mol)  
    3259                      fq1      = fq0 * exp(-(fthk / xfastsi))         !! how much  opal leaves this box            (mol) 
    3260                      freminsi = (fq0 - fq1) / fthk                   !! Si remineralisation in this box           (mol) 
    3261                      ffastsi(ji,jj) = fq1 
    3262                      !! 
    3263                      !! === biogenic calcium carbonate === 
    3264                      fq0      = ffastca(ji,jj)                       !! how much CaCO3 enters this box            (mol) 
    3265                      if (fdep.le.fccd_dep) then 
    3266                         !! whole grid cell above CCD 
    3267                         fq1      = fq0                               !! above lysocline, no Ca dissolves          (mol) 
    3268                         freminca = 0.0                               !! above lysocline, no Ca dissolves          (mol) 
    3269                         fccd(ji,jj) = real(jk)                       !! which is the last level above the CCD?    (#) 
    3270                      elseif (fdep.ge.fccd_dep) then 
    3271                         !! whole grid cell below CCD 
    3272                         fq1      = fq0 * exp(-(fthk / xfastca))      !! how much CaCO3 leaves this box            (mol) 
    3273                         freminca = (fq0 - fq1) / fthk                !! Ca remineralisation in this box           (mol) 
    3274                      else 
    3275                         !! partial grid cell below CCD 
    3276                         fq2      = fdep1 - fccd_dep                  !! amount of grid cell below CCD             (m) 
    3277                         fq1      = fq0 * exp(-(fq2 / xfastca))       !! how much CaCO3 leaves this box            (mol) 
    3278                         freminca = (fq0 - fq1) / fthk                !! Ca remineralisation in this box           (mol) 
    3279                      endif 
    3280                      ffastca(ji,jj) = fq1  
    3281                   else 
    3282                      !! this is BELOW THE LAST OCEAN BOX (do nothing) 
    3283                      freminc  = 0.0 
    3284                      freminn  = 0.0 
    3285                      freminfe = 0.0 
    3286                      freminsi = 0.0 
    3287                      freminca = 0.0               
    3288                   endif 
    3289  
    3290                elseif (jexport.eq.2.or.jexport.eq.3) then 
    3291                   if (jexport.eq.2) then 
    3292                      !!====================================================================== 
    3293                      !! MARTIN ET AL. (1987) SUBMODEL 
    3294                      !!====================================================================== 
    3295                      !!  
    3296                      !!---------------------------------------------------------------------- 
    3297                      !! This submodel uses the classic Martin et al. (1987) curve 
    3298                      !! to determine the attenuation of fast-sinking detritus down 
    3299                      !! the water column.  All three organic elements, C, N and Fe, 
    3300                      !! are handled identically, and their quantities in sinking 
    3301                      !! particles attenuate according to a power relationship 
    3302                      !! governed by parameter "b".  This is assigned a canonical  
    3303                      !! value of -0.858.  Biogenic opal and calcium carbonate are 
    3304                      !! attentuated using the same function as in the ballast 
    3305                      !! submodel 
    3306                      !!---------------------------------------------------------------------- 
    3307                      !! 
    3308                      fb_val = -0.858 
    3309                   elseif (jexport.eq.3) then 
    3310                      !!====================================================================== 
    3311                      !! HENSON ET AL. (2011) SUBMODEL 
    3312                      !!====================================================================== 
    3313                      !! 
    3314                      !!---------------------------------------------------------------------- 
    3315                      !! This submodel reconfigures the Martin et al. (1987) curve by 
    3316                      !! allowing the "b" value to vary geographically.  Its value is 
    3317                      !! set, following Henson et al. (2011), as a function of local 
    3318                      !! sea surface temperature: 
    3319                      !!   b = -1.06 + (0.024 * SST) 
    3320                      !! This means that remineralisation length scales are longer in 
    3321                      !! warm, tropical areas and shorter in cold, polar areas.  This 
    3322                      !! does seem back-to-front (i.e. one would expect GREATER 
    3323                      !! remineralisation in warmer waters), but is an outcome of  
    3324                      !! analysis of sediment trap data, and it may reflect details 
    3325                      !! of ecosystem structure that pertain to particle production 
    3326                      !! rather than simply Q10. 
    3327                      !!---------------------------------------------------------------------- 
    3328                      !! 
    3329                      fl_sst = tsn(ji,jj,1,jp_tem) 
    3330                      fb_val = -1.06 + (0.024 * fl_sst) 
    3331                   endif 
    3332                   !!    
    3333                   if (jk.eq.1) then 
    3334                      !! this is the SURFACE OCEAN BOX (no remineralisation) 
    3335                      !! 
    3336                      freminc  = 0.0 
    3337                      freminn  = 0.0 
    3338                      freminfe = 0.0 
    3339                      freminsi = 0.0 
    3340                      freminca = 0.0 
    3341                   elseif (jk.le.jmbathy) then 
    3342                      !! this is an OCEAN BOX (remineralise some material) 
    3343                      !! 
    3344                      !! === organic carbon === 
    3345                      fq0      = ffastc(ji,jj)                        !! how much organic C enters this box        (mol) 
    3346                      fq1      = fq0 * ((fdep1/fdep)**fb_val)         !! how much organic C leaves this box        (mol) 
    3347                      freminc  = (fq0 - fq1) / fthk                   !! C remineralisation in this box            (mol) 
    3348                      ffastc(ji,jj)  = fq1 
    3349                      !! 
    3350                      !! === organic nitrogen === 
    3351                      fq0      = ffastn(ji,jj)                        !! how much organic N enters this box        (mol) 
    3352                      fq1      = fq0 * ((fdep1/fdep)**fb_val)         !! how much organic N leaves this box        (mol) 
    3353                      freminn  = (fq0 - fq1) / fthk                   !! N remineralisation in this box            (mol) 
    3354                      ffastn(ji,jj)  = fq1 
    3355                      !! 
    3356                      !! === organic iron === 
    3357                      fq0      = ffastfe(ji,jj)                       !! how much organic Fe enters this box       (mol) 
    3358                      fq1      = fq0 * ((fdep1/fdep)**fb_val)         !! how much organic Fe leaves this box       (mol) 
    3359                      freminfe = (fq0 - fq1) / fthk                   !! Fe remineralisation in this box           (mol) 
    3360                      ffastfe(ji,jj) = fq1 
    3361                      !! 
    3362                      !! === biogenic silicon === 
    3363                      fq0      = ffastsi(ji,jj)                       !! how much  opal centers this box           (mol)  
    3364                      fq1      = fq0 * exp(-(fthk / xfastsi))         !! how much  opal leaves this box            (mol) 
    3365                      freminsi = (fq0 - fq1) / fthk                   !! Si remineralisation in this box           (mol) 
    3366                      ffastsi(ji,jj) = fq1 
    3367                      !! 
    3368                      !! === biogenic calcium carbonate === 
    3369                      fq0      = ffastca(ji,jj)                       !! how much CaCO3 enters this box            (mol) 
    3370                      if (fdep.le.ocal_ccd(ji,jj)) then 
    3371                         !! whole grid cell above CCD 
    3372                         fq1      = fq0                               !! above lysocline, no Ca dissolves          (mol) 
    3373                         freminca = 0.0                               !! above lysocline, no Ca dissolves          (mol) 
    3374                         fccd(ji,jj) = real(jk)                       !! which is the last level above the CCD?    (#) 
    3375                      elseif (fdep.ge.ocal_ccd(ji,jj)) then 
    3376                         !! whole grid cell below CCD 
    3377                         fq1      = fq0 * exp(-(fthk / xfastca))      !! how much CaCO3 leaves this box            (mol) 
    3378                         freminca = (fq0 - fq1) / fthk                !! Ca remineralisation in this box           (mol) 
    3379                      else 
    3380                         !! partial grid cell below CCD 
    3381                         fq2      = fdep1 - ocal_ccd(ji,jj)           !! amount of grid cell below CCD             (m) 
    3382                         fq1      = fq0 * exp(-(fq2 / xfastca))       !! how much CaCO3 leaves this box            (mol) 
    3383                         freminca = (fq0 - fq1) / fthk                !! Ca remineralisation in this box           (mol) 
    3384                      endif 
    3385                      ffastca(ji,jj) = fq1  
    3386                   else 
    3387                      !! this is BELOW THE LAST OCEAN BOX (do nothing) 
    3388                      freminc  = 0.0 
    3389                      freminn  = 0.0 
    3390                      freminfe = 0.0 
    3391                      freminsi = 0.0 
    3392                      freminca = 0.0               
    3393                   endif 
    3394  
    3395                endif 
    3396  
    3397                !!---------------------------------------------------------------------- 
    3398                !! Fast-sinking detritus fluxes, pt. 2: UPDATE FAST FLUXES 
    3399                !! here locally calculated additions to the fast-sinking flux are added 
    3400                !! to the total fast-sinking flux; this is done here such that material 
    3401                !! produced in a particular layer is only remineralised below this 
    3402                !! layer 
    3403                !!---------------------------------------------------------------------- 
    3404                !! 
    3405                !! add sinking material generated in this layer to running totals 
    3406                !! 
    3407                !! === organic carbon ===                          (diatom and mesozooplankton mortality) 
    3408                ffastc(ji,jj)  = ffastc(ji,jj)  + (ftempc  * fthk) 
    3409                !! 
    3410                !! === organic nitrogen ===                        (diatom and mesozooplankton mortality) 
    3411                ffastn(ji,jj)  = ffastn(ji,jj)  + (ftempn  * fthk) 
    3412                !! 
    3413                !! === organic iron ===                            (diatom and mesozooplankton mortality) 
    3414                ffastfe(ji,jj) = ffastfe(ji,jj) + (ftempfe * fthk) 
    3415                !! 
    3416                !! === biogenic silicon ===                        (diatom mortality and grazed diatoms) 
    3417                ffastsi(ji,jj) = ffastsi(ji,jj) + (ftempsi * fthk) 
    3418                !! 
    3419                !! === biogenic calcium carbonate ===              (latitudinally-based fraction of total primary production) 
    3420                ffastca(ji,jj) = ffastca(ji,jj) + (ftempca * fthk) 
    3421  
    3422                !!---------------------------------------------------------------------- 
    3423                !! Fast-sinking detritus fluxes, pt. 3: SEAFLOOR 
    3424                !! remineralise all remaining fast-sinking detritus to dissolved 
    3425                !! nutrients; the sedimentation fluxes calculated here allow the 
    3426                !! separation of what's remineralised sinking through the final 
    3427                !! ocean box from that which is added to the final box by the 
    3428                !! remineralisation of material that reaches the seafloor (i.e. 
    3429                !! the model assumes that *all* material that hits the seafloor 
    3430                !! is remineralised and that none is permanently buried; hey, 
    3431                !! this is a giant GCM model that can't be run for long enough 
    3432                !! to deal with burial fluxes!) 
    3433                !! 
    3434                !! in a change to this process, in part so that MEDUSA behaves 
    3435                !! a little more like ERSEM et al., fast-sinking detritus (N, Fe 
    3436                !! and C) is converted to slow sinking detritus at the seafloor 
    3437                !! instead of being remineralised; the rationale is that in 
    3438                !! shallower shelf regions (... that are not fully mixed!) this 
    3439                !! allows the detrital material to return slowly to dissolved  
    3440                !! nutrient rather than instantaneously as now; the alternative 
    3441                !! would be to explicitly handle seafloor organic material - a 
    3442                !! headache I don't wish to experience at this point; note that 
    3443                !! fast-sinking Si and Ca detritus is just remineralised as  
    3444                !! per usual 
    3445                !!  
    3446                !! AXY (13/01/12) 
    3447                !! in a further change to this process, again so that MEDUSA is 
    3448                !! a little more like ERSEM et al., material that reaches the 
    3449                !! seafloor can now be added to sediment pools and stored for 
    3450                !! slow release; there are new 2D arrays for organic nitrogen, 
    3451                !! iron and carbon and inorganic silicon and carbon that allow 
    3452                !! fast and slow detritus that reaches the seafloor to be held 
    3453                !! and released back to the water column more slowly; these arrays 
    3454                !! are transferred via the tracer restart files between repeat 
    3455                !! submissions of the model 
    3456                !!---------------------------------------------------------------------- 
    3457                !!  
    3458                ffast2slowc  = 0.0 
    3459                ffast2slown  = 0.0 
    3460                ffast2slowfe = 0.0 
    3461                !! 
    3462                if (jk.eq.jmbathy) then 
    3463                   !! this is the BOTTOM OCEAN BOX (remineralise everything) 
    3464                   !! 
    3465                   !! AXY (17/01/12): tweaked to include benthos pools 
    3466                   !!  
    3467                   !! === organic carbon === 
    3468                   if (jfdfate.eq.0 .and. jorgben.eq.0) then 
    3469                      freminc  = freminc + (ffastc(ji,jj) / fthk)    !! C remineralisation in this box            (mol/m3) 
    3470                   elseif (jfdfate.eq.1 .and. jorgben.eq.0) then 
    3471                      ffast2slowc = ffastc(ji,jj) / fthk             !! fast C -> slow C                          (mol/m3) 
    3472                      fslowc      = fslowc + ffast2slowc 
    3473                   elseif (jfdfate.eq.0 .and. jorgben.eq.1) then 
    3474                      f_fbenin_c(ji,jj)  = ffastc(ji,jj)             !! fast C -> benthic C                       (mol/m2) 
    3475                   endif 
    3476                   fsedc(ji,jj)   = ffastc(ji,jj)                          !! record seafloor C                         (mol/m2) 
    3477                   ffastc(ji,jj)  = 0.0 
    3478                   !! 
    3479                   !! === organic nitrogen === 
    3480                   if (jfdfate.eq.0 .and. jorgben.eq.0) then 
    3481                      freminn  = freminn + (ffastn(ji,jj) / fthk)    !! N remineralisation in this box            (mol/m3) 
    3482                   elseif (jfdfate.eq.1 .and. jorgben.eq.0) then 
    3483                      ffast2slown = ffastn(ji,jj) / fthk             !! fast N -> slow N                          (mol/m3) 
    3484                      fslown      = fslown + ffast2slown 
    3485                   elseif (jfdfate.eq.0 .and. jorgben.eq.1) then 
    3486                      f_fbenin_n(ji,jj)  = ffastn(ji,jj)             !! fast N -> benthic N                       (mol/m2) 
    3487                   endif 
    3488                   fsedn(ji,jj)   = ffastn(ji,jj)                          !! record seafloor N                         (mol/m2) 
    3489                   ffastn(ji,jj)  = 0.0 
    3490                   !! 
    3491                   !! === organic iron === 
    3492                   if (jfdfate.eq.0 .and. jorgben.eq.0) then 
    3493                      freminfe = freminfe + (ffastfe(ji,jj) / fthk)  !! Fe remineralisation in this box           (mol/m3) 
    3494                   elseif (jfdfate.eq.1 .and. jorgben.eq.0) then 
    3495                      ffast2slowfe = ffastn(ji,jj) / fthk            !! fast Fe -> slow Fe                        (mol/m3) 
    3496                   elseif (jfdfate.eq.0 .and. jorgben.eq.1) then 
    3497                      f_fbenin_fe(ji,jj) = ffastfe(ji,jj)            !! fast Fe -> benthic Fe                     (mol/m2) 
    3498                   endif 
    3499                   fsedfe(ji,jj)  = ffastfe(ji,jj)                         !! record seafloor Fe                        (mol/m2) 
    3500                   ffastfe(ji,jj) = 0.0 
    3501                   !! 
    3502                   !! === biogenic silicon === 
    3503                   if (jinorgben.eq.0) then 
    3504                      freminsi = freminsi + (ffastsi(ji,jj) / fthk)  !! Si remineralisation in this box           (mol/m3) 
    3505                   elseif (jinorgben.eq.1) then 
    3506                      f_fbenin_si(ji,jj) = ffastsi(ji,jj)            !! fast Si -> benthic Si                     (mol/m2) 
    3507                   endif 
    3508                   fsedsi(ji,jj)   = ffastsi(ji,jj)                         !! record seafloor Si                        (mol/m2) 
    3509                   ffastsi(ji,jj) = 0.0 
    3510                   !! 
    3511                   !! === biogenic calcium carbonate === 
    3512                   if (jinorgben.eq.0) then 
    3513                      freminca = freminca + (ffastca(ji,jj) / fthk)  !! Ca remineralisation in this box           (mol/m3)  
    3514                   elseif (jinorgben.eq.1) then 
    3515                      f_fbenin_ca(ji,jj) = ffastca(ji,jj)            !! fast Ca -> benthic Ca                     (mol/m2) 
    3516                   endif 
    3517                   fsedca(ji,jj)   = ffastca(ji,jj)                         !! record seafloor Ca                        (mol/m2) 
    3518                   ffastca(ji,jj) = 0.0 
    3519                endif 
    3520  
    3521 # if defined key_debug_medusa 
    3522                if (idf.eq.1) then 
    3523                   !!---------------------------------------------------------------------- 
    3524                   !! Integrate total fast detritus remineralisation 
    3525                   !!---------------------------------------------------------------------- 
    3526                   !! 
    3527                   fofd_n(ji,jj)  = fofd_n(ji,jj)  + (freminn  * fthk) 
    3528                   fofd_si(ji,jj) = fofd_si(ji,jj) + (freminsi * fthk) 
    3529                   fofd_fe(ji,jj) = fofd_fe(ji,jj) + (freminfe * fthk) 
    3530 #  if defined key_roam 
    3531                   fofd_c(ji,jj)  = fofd_c(ji,jj)  + (freminc  * fthk) 
    3532 #  endif 
    3533                endif 
    3534 # endif 
    3535  
    3536                !!---------------------------------------------------------------------- 
    3537                !! Sort out remineralisation tally of fast-sinking detritus 
    3538                !!---------------------------------------------------------------------- 
    3539                !! 
    3540                !! update fast-sinking regeneration arrays 
    3541                fregenfast(ji,jj)   = fregenfast(ji,jj)   + (freminn  * fthk) 
    3542                fregenfastsi(ji,jj) = fregenfastsi(ji,jj) + (freminsi * fthk) 
    3543 # if defined key_roam 
    3544                fregenfastc(ji,jj)  = fregenfastc(ji,jj)  + (freminc  * fthk) 
    3545 # endif 
    3546  
    3547                !!---------------------------------------------------------------------- 
    3548                !! Benthic remineralisation fluxes 
    3549                !!---------------------------------------------------------------------- 
    3550                !! 
    3551                if (jk.eq.jmbathy) then 
    3552                   !! 
    3553                   !! organic components 
    3554                   if (jorgben.eq.1) then 
    3555                      f_benout_n(ji,jj)  = xsedn  * zn_sed_n(ji,jj) 
    3556                      f_benout_fe(ji,jj) = xsedfe * zn_sed_fe(ji,jj) 
    3557                      f_benout_c(ji,jj)  = xsedc  * zn_sed_c(ji,jj) 
    3558                   endif 
    3559                   !! 
    3560                   !! inorganic components 
    3561                   if (jinorgben.eq.1) then 
    3562                      f_benout_si(ji,jj) = xsedsi * zn_sed_si(ji,jj) 
    3563                      f_benout_ca(ji,jj) = xsedca * zn_sed_ca(ji,jj) 
    3564                      !! 
    3565                      !! account for CaCO3 that dissolves when it shouldn't 
    3566                      if ( fdep .le. fccd_dep ) then 
    3567                         f_benout_lyso_ca(ji,jj) = xsedca * zn_sed_ca(ji,jj) 
    3568                      endif 
    3569                   endif 
    3570                endif 
    3571                CALL flush(numout) 
    3572  
    3573                !!====================================================================== 
    3574                !! LOCAL GRID CELL TRENDS 
    3575                !!====================================================================== 
    3576                !! 
    3577                !!---------------------------------------------------------------------- 
    3578                !! Determination of trends 
    3579                !!---------------------------------------------------------------------- 
    3580                !! 
    3581                !!---------------------------------------------------------------------- 
    3582                !! chlorophyll 
    3583                btra(jpchn) = b0 * ( & 
    3584                  + ((frn * fprn * zphn) - fgmipn - fgmepn - fdpn - fdpn2) * (fthetan / xxi) ) 
    3585                btra(jpchd) = b0 * ( & 
    3586                  + ((frd * fprd * zphd) - fgmepd - fdpd - fdpd2) * (fthetad / xxi) ) 
    3587                !! 
    3588                !!---------------------------------------------------------------------- 
    3589                !! phytoplankton 
    3590                btra(jpphn) = b0 * ( & 
    3591                  + (fprn * zphn) - fgmipn - fgmepn - fdpn - fdpn2 ) 
    3592                btra(jpphd) = b0 * ( & 
    3593                  + (fprd * zphd) - fgmepd - fdpd - fdpd2 ) 
    3594                btra(jppds) = b0 * ( & 
    3595                  + (fprds * zpds) - fgmepds - fdpds - fsdiss - fdpds2 ) 
    3596                !! 
    3597                !!---------------------------------------------------------------------- 
    3598                !! zooplankton 
    3599                btra(jpzmi) = b0 * ( & 
    3600                  + fmigrow - fgmezmi - fdzmi - fdzmi2 ) 
    3601                btra(jpzme) = b0 * ( & 
    3602                  + fmegrow - fdzme - fdzme2 ) 
    3603                !! 
    3604                !!---------------------------------------------------------------------- 
    3605                !! detritus 
    3606                btra(jpdet) = b0 * ( & 
    3607                  + fdpn + ((1.0 - xfdfrac1) * fdpd)              &  ! mort. losses 
    3608                  + fdzmi + ((1.0 - xfdfrac2) * fdzme)            &  ! mort. losses 
    3609                  + ((1.0 - xbetan) * (finmi + finme))            &  ! assim. inefficiency 
    3610                  - fgmid - fgmed - fdd                           &  ! grazing and remin. 
    3611                  + ffast2slown )                                    ! seafloor fast->slow 
    3612                !! 
    3613                !!---------------------------------------------------------------------- 
    3614                !! dissolved inorganic nitrogen nutrient 
    3615                fn_cons = 0.0  & 
    3616                  - (fprn * zphn) - (fprd * zphd)                    ! primary production 
    3617                fn_prod = 0.0  & 
    3618                  + (xphi * (fgmipn + fgmid))                     &  ! messy feeding remin. 
    3619                  + (xphi * (fgmepn + fgmepd + fgmezmi + fgmed))  &  ! messy feeding remin. 
    3620                  + fmiexcr + fmeexcr + fdd + freminn             &  ! excretion and remin. 
    3621                  + fdpn2 + fdpd2 + fdzmi2 + fdzme2                  ! metab. losses 
    3622                !!  
    3623                !! riverine flux 
    3624                if ( jriver_n .gt. 0 ) then 
    3625                   f_riv_loc_n = f_riv_n(ji,jj) * friver_dep(jk,jmbathy) / fthk 
    3626                   fn_prod = fn_prod + f_riv_loc_n 
    3627                endif 
    3628                !!   
    3629                !! benthic remineralisation 
    3630                if (jk.eq.jmbathy .and. jorgben.eq.1 .and. ibenthic.eq.1) then 
    3631                   fn_prod = fn_prod + (f_benout_n(ji,jj) / fthk) 
    3632                endif 
    3633                !! 
    3634                btra(jpdin) = b0 * ( & 
    3635                  fn_prod + fn_cons ) 
    3636                !! 
    3637                fnit_cons(ji,jj) = fnit_cons(ji,jj) + ( fthk * (  &  ! consumption of dissolved nitrogen 
    3638                  fn_cons ) ) 
    3639                fnit_prod(ji,jj) = fnit_prod(ji,jj) + ( fthk * (  &  ! production of dissolved nitrogen 
    3640                  fn_prod ) ) 
    3641                !! 
    3642                !!---------------------------------------------------------------------- 
    3643                !! dissolved silicic acid nutrient 
    3644                fs_cons = 0.0  & 
    3645                  - (fprds * zpds)                                   ! opal production 
    3646                fs_prod = 0.0  & 
    3647                  + fsdiss                                        &  ! opal dissolution 
    3648                  + ((1.0 - xfdfrac1) * fdpds)                    &  ! mort. loss 
    3649                  + ((1.0 - xfdfrac3) * fgmepds)                  &  ! egestion of grazed Si 
    3650                  + freminsi + fdpds2                                ! fast diss. and metab. losses 
    3651                !!  
    3652                !! riverine flux 
    3653                if ( jriver_si .gt. 0 ) then 
    3654                   f_riv_loc_si = f_riv_si(ji,jj) * friver_dep(jk,jmbathy) / fthk 
    3655                   fs_prod = fs_prod + f_riv_loc_si 
    3656                endif 
    3657                !!   
    3658                !! benthic remineralisation 
    3659                if (jk.eq.jmbathy .and. jinorgben.eq.1 .and. ibenthic.eq.1) then 
    3660                   fs_prod = fs_prod + (f_benout_si(ji,jj) / fthk) 
    3661                endif 
    3662                !! 
    3663                btra(jpsil) = b0 * ( & 
    3664                  fs_prod + fs_cons ) 
    3665                !! 
    3666                fsil_cons(ji,jj) = fsil_cons(ji,jj) + ( fthk * (  &  ! consumption of dissolved silicon 
    3667                  fs_cons ) ) 
    3668                fsil_prod(ji,jj) = fsil_prod(ji,jj) + ( fthk * (  &  ! production of dissolved silicon 
    3669                  fs_prod ) ) 
    3670                !! 
    3671                !!---------------------------------------------------------------------- 
    3672                !! dissolved "iron" nutrient 
    3673                btra(jpfer) = b0 * ( & 
    3674                + (xrfn * btra(jpdin)) + ffetop + ffebot - ffescav ) 
    3675  
    3676 # if defined key_roam 
    3677                !! 
    3678                !!---------------------------------------------------------------------- 
    3679                !! AXY (26/11/08): implicit detrital carbon change 
    3680                btra(jpdtc) = b0 * ( & 
    3681                  + (xthetapn * fdpn) + ((1.0 - xfdfrac1) * (xthetapd * fdpd))      &  ! mort. losses 
    3682                  + (xthetazmi * fdzmi) + ((1.0 - xfdfrac2) * (xthetazme * fdzme))  &  ! mort. losses 
    3683                  + ((1.0 - xbetac) * (ficmi + ficme))                              &  ! assim. inefficiency 
    3684                  - fgmidc - fgmedc - fddc                                          &  ! grazing and remin. 
    3685                  + ffast2slowc )                                                      ! seafloor fast->slow 
    3686                !! 
    3687                !!---------------------------------------------------------------------- 
    3688                !! dissolved inorganic carbon 
    3689                fc_cons = 0.0  & 
    3690                  - (xthetapn * fprn * zphn) - (xthetapd * fprd * zphd)                ! primary production 
    3691                fc_prod = 0.0  & 
    3692                  + (xthetapn * xphi * fgmipn) + (xphi * fgmidc)                    &  ! messy feeding remin 
    3693                  + (xthetapn * xphi * fgmepn) + (xthetapd * xphi * fgmepd)         &  ! messy feeding remin 
    3694                  + (xthetazmi * xphi * fgmezmi) + (xphi * fgmedc)                  &  ! messy feeding remin 
    3695                  + fmiresp + fmeresp + fddc + freminc + (xthetapn * fdpn2)         &  ! resp., remin., losses 
    3696                  + (xthetapd * fdpd2) + (xthetazmi * fdzmi2)                       &  ! losses 
    3697                  + (xthetazme * fdzme2)                                               ! losses 
    3698                !!  
    3699                !! riverine flux 
    3700                if ( jriver_c .gt. 0 ) then 
    3701                   f_riv_loc_c = f_riv_c(ji,jj) * friver_dep(jk,jmbathy) / fthk 
    3702                   fc_prod = fc_prod + f_riv_loc_c 
    3703                endif 
    3704                !!   
    3705                !! benthic remineralisation 
    3706                if (jk.eq.jmbathy .and. jorgben.eq.1 .and. ibenthic.eq.1) then 
    3707                   fc_prod = fc_prod + (f_benout_c(ji,jj) / fthk) 
    3708                endif 
    3709                if (jk.eq.jmbathy .and. jinorgben.eq.1 .and. ibenthic.eq.1) then 
    3710                   fc_prod = fc_prod + (f_benout_ca(ji,jj) / fthk) 
    3711                endif 
    3712                !! 
    3713                !! community respiration (does not include CaCO3 terms - obviously!) 
    3714                fcomm_resp(ji,jj) = fcomm_resp(ji,jj) + fc_prod 
    3715                !! 
    3716                !! CaCO3 
    3717                fc_prod = fc_prod - ftempca + freminca 
    3718                !!  
    3719                !! riverine flux 
    3720                if ( jk .eq. 1 .and. jriver_c .gt. 0 ) then 
    3721                   fc_prod = fc_prod + f_riv_c(ji,jj) 
    3722                endif 
    3723                !! 
    3724                btra(jpdic) = b0 * ( & 
    3725                  fc_prod + fc_cons ) 
    3726                !! 
    3727                fcar_cons(ji,jj) = fcar_cons(ji,jj) + ( fthk * (  &  ! consumption of dissolved carbon 
    3728                  fc_cons ) ) 
    3729                fcar_prod(ji,jj) = fcar_prod(ji,jj) + ( fthk * (  &  ! production of dissolved carbon 
    3730                  fc_prod ) ) 
    3731                !! 
    3732                !!---------------------------------------------------------------------- 
    3733                !! alkalinity 
    3734                fa_prod = 0.0  & 
    3735                  + (2.0 * freminca)                                                   ! CaCO3 dissolution 
    3736                fa_cons = 0.0  & 
    3737                  - (2.0 * ftempca)                                                    ! CaCO3 production 
    3738                !!  
    3739                !! riverine flux 
    3740                if ( jriver_alk .gt. 0 ) then 
    3741                   f_riv_loc_alk = f_riv_alk(ji,jj) * friver_dep(jk,jmbathy) / fthk 
    3742                   fa_prod = fa_prod + f_riv_loc_alk 
    3743                endif 
    3744                !!   
    3745                !! benthic remineralisation 
    3746                if (jk.eq.jmbathy .and. jinorgben.eq.1 .and. ibenthic.eq.1) then 
    3747                   fa_prod = fa_prod + (2.0 * f_benout_ca(ji,jj) / fthk) 
    3748                endif 
    3749                !! 
    3750                btra(jpalk) = b0 * ( & 
    3751                  fa_prod + fa_cons ) 
    3752                !! 
    3753                !!---------------------------------------------------------------------- 
    3754                !! oxygen (has protection at low O2 concentrations; OCMIP-2 style) 
    3755                fo2_prod = 0.0 & 
    3756                  + (xthetanit * fprn * zphn)                                      & ! Pn primary production, N 
    3757                  + (xthetanit * fprd * zphd)                                      & ! Pd primary production, N 
    3758                  + (xthetarem * xthetapn * fprn * zphn)                           & ! Pn primary production, C 
    3759                  + (xthetarem * xthetapd * fprd * zphd)                             ! Pd primary production, C 
    3760                fo2_ncons = 0.0 & 
    3761                  - (xthetanit * xphi * fgmipn)                                    & ! Pn messy feeding remin., N 
    3762                  - (xthetanit * xphi * fgmid)                                     & ! D  messy feeding remin., N 
    3763                  - (xthetanit * xphi * fgmepn)                                    & ! Pn messy feeding remin., N 
    3764                  - (xthetanit * xphi * fgmepd)                                    & ! Pd messy feeding remin., N 
    3765                  - (xthetanit * xphi * fgmezmi)                                   & ! Zi messy feeding remin., N 
    3766                  - (xthetanit * xphi * fgmed)                                     & ! D  messy feeding remin., N 
    3767                  - (xthetanit * fmiexcr)                                          & ! microzoo excretion, N 
    3768                  - (xthetanit * fmeexcr)                                          & ! mesozoo  excretion, N 
    3769                  - (xthetanit * fdd)                                              & ! slow detritus remin., N  
    3770                  - (xthetanit * freminn)                                          & ! fast detritus remin., N 
    3771                  - (xthetanit * fdpn2)                                            & ! Pn  losses, N 
    3772                  - (xthetanit * fdpd2)                                            & ! Pd  losses, N 
    3773                  - (xthetanit * fdzmi2)                                           & ! Zmi losses, N 
    3774                  - (xthetanit * fdzme2)                                             ! Zme losses, N 
    3775                !!   
    3776                !! benthic remineralisation 
    3777                if (jk.eq.jmbathy .and. jorgben.eq.1 .and. ibenthic.eq.1) then 
    3778                   fo2_ncons = fo2_ncons - (xthetanit * f_benout_n(ji,jj) / fthk) 
    3779                endif 
    3780                fo2_ccons = 0.0 & 
    3781                  - (xthetarem * xthetapn * xphi * fgmipn)                         & ! Pn messy feeding remin., C 
    3782                  - (xthetarem * xphi * fgmidc)                                    & ! D  messy feeding remin., C 
    3783                  - (xthetarem * xthetapn * xphi * fgmepn)                         & ! Pn messy feeding remin., C 
    3784                  - (xthetarem * xthetapd * xphi * fgmepd)                         & ! Pd messy feeding remin., C 
    3785                  - (xthetarem * xthetazmi * xphi * fgmezmi)                       & ! Zi messy feeding remin., C 
    3786                  - (xthetarem * xphi * fgmedc)                                    & ! D  messy feeding remin., C 
    3787                  - (xthetarem * fmiresp)                                          & ! microzoo respiration, C 
    3788                  - (xthetarem * fmeresp)                                          & ! mesozoo  respiration, C 
    3789                  - (xthetarem * fddc)                                             & ! slow detritus remin., C 
    3790                  - (xthetarem * freminc)                                          & ! fast detritus remin., C 
    3791                  - (xthetarem * xthetapn * fdpn2)                                 & ! Pn  losses, C 
    3792                  - (xthetarem * xthetapd * fdpd2)                                 & ! Pd  losses, C 
    3793                  - (xthetarem * xthetazmi * fdzmi2)                               & ! Zmi losses, C 
    3794                  - (xthetarem * xthetazme * fdzme2)                                 ! Zme losses, C 
    3795                !!   
    3796                !! benthic remineralisation 
    3797                if (jk.eq.jmbathy .and. jorgben.eq.1 .and. ibenthic.eq.1) then 
    3798                   fo2_ccons = fo2_ccons - (xthetarem * f_benout_c(ji,jj) / fthk) 
    3799                endif 
    3800                fo2_cons = fo2_ncons + fo2_ccons 
    3801                !! 
    3802                !! is this a suboxic zone? 
    3803                if (zoxy.lt.xo2min) then  ! deficient O2; production fluxes only 
    3804                   btra(jpoxy) = b0 * ( & 
    3805                     fo2_prod ) 
    3806                   foxy_prod(ji,jj) = foxy_prod(ji,jj) + ( fthk * fo2_prod ) 
    3807                   foxy_anox(ji,jj) = foxy_anox(ji,jj) + ( fthk * fo2_cons ) 
    3808                else                      ! sufficient O2; production + consumption fluxes 
    3809                   btra(jpoxy) = b0 * ( & 
    3810                     fo2_prod + fo2_cons ) 
    3811                   foxy_prod(ji,jj) = foxy_prod(ji,jj) + ( fthk * fo2_prod ) 
    3812                   foxy_cons(ji,jj) = foxy_cons(ji,jj) + ( fthk * fo2_cons ) 
    3813                endif 
    3814                !! 
    3815                !! air-sea fluxes (if this is the surface box) 
    3816                if (jk.eq.1) then 
    3817                   !! 
    3818                   !! CO2 flux 
    3819                   btra(jpdic) = btra(jpdic) + (b0 * f_co2flux) 
    3820                   !! 
    3821                   !! O2 flux (mol/m3/s -> mmol/m3/d) 
    3822                   btra(jpoxy) = btra(jpoxy) + (b0 * f_o2flux) 
    3823                endif 
    3824 # endif 
    3825  
    3826 # if defined key_debug_medusa 
    3827                !! report state variable fluxes (not including fast-sinking detritus) 
    3828                if (idf.eq.1.AND.idfval.eq.1) then 
    3829                   IF (lwp) write (numout,*) '------------------------------' 
    3830                   IF (lwp) write (numout,*) 'btra(jpchn)(',jk,')  = ', btra(jpchn) 
    3831                   IF (lwp) write (numout,*) 'btra(jpchd)(',jk,')  = ', btra(jpchd) 
    3832                   IF (lwp) write (numout,*) 'btra(jpphn)(',jk,')  = ', btra(jpphn) 
    3833                   IF (lwp) write (numout,*) 'btra(jpphd)(',jk,')  = ', btra(jpphd) 
    3834                   IF (lwp) write (numout,*) 'btra(jppds)(',jk,')  = ', btra(jppds) 
    3835                   IF (lwp) write (numout,*) 'btra(jpzmi)(',jk,')  = ', btra(jpzmi) 
    3836                   IF (lwp) write (numout,*) 'btra(jpzme)(',jk,')  = ', btra(jpzme) 
    3837                   IF (lwp) write (numout,*) 'btra(jpdet)(',jk,')  = ', btra(jpdet) 
    3838                   IF (lwp) write (numout,*) 'btra(jpdin)(',jk,')  = ', btra(jpdin) 
    3839                   IF (lwp) write (numout,*) 'btra(jpsil)(',jk,')  = ', btra(jpsil) 
    3840                   IF (lwp) write (numout,*) 'btra(jpfer)(',jk,')  = ', btra(jpfer) 
    3841 #  if defined key_roam 
    3842                   IF (lwp) write (numout,*) 'btra(jpdtc)(',jk,')  = ', btra(jpdtc) 
    3843                   IF (lwp) write (numout,*) 'btra(jpdic)(',jk,')  = ', btra(jpdic) 
    3844                   IF (lwp) write (numout,*) 'btra(jpalk)(',jk,')  = ', btra(jpalk) 
    3845                   IF (lwp) write (numout,*) 'btra(jpoxy)(',jk,')  = ', btra(jpoxy) 
    3846 #  endif 
    3847                endif 
    3848 # endif 
    3849  
    3850                !!---------------------------------------------------------------------- 
    3851                !! Integrate calculated fluxes for mass balance 
    3852                !!---------------------------------------------------------------------- 
    3853                !! 
    3854                !! === nitrogen === 
    3855                fflx_n(ji,jj)  = fflx_n(ji,jj)  + & 
    3856                   fthk * ( btra(jpphn) + btra(jpphd) + btra(jpzmi) + btra(jpzme) + btra(jpdet) + btra(jpdin) ) 
    3857                !! === silicon === 
    3858                fflx_si(ji,jj) = fflx_si(ji,jj) + & 
    3859                   fthk * ( btra(jppds) + btra(jpsil) ) 
    3860                !! === iron === 
    3861                fflx_fe(ji,jj) = fflx_fe(ji,jj) + & 
    3862                   fthk * ( ( xrfn * ( btra(jpphn) + btra(jpphd) + btra(jpzmi) + btra(jpzme) + btra(jpdet)) ) + btra(jpfer) ) 
    3863 # if defined key_roam 
    3864                !! === carbon === 
    3865                fflx_c(ji,jj)  = fflx_c(ji,jj)  + & 
    3866                   fthk * ( (xthetapn * btra(jpphn)) + (xthetapd * btra(jpphd)) + & 
    3867                   (xthetazmi * btra(jpzmi)) + (xthetazme * btra(jpzme)) + btra(jpdtc) + btra(jpdic) ) 
    3868                !! === alkalinity === 
    3869                fflx_a(ji,jj)  = fflx_a(ji,jj)  + & 
    3870                   fthk * ( btra(jpalk) ) 
    3871                !! === oxygen === 
    3872                fflx_o2(ji,jj) = fflx_o2(ji,jj) + & 
    3873                   fthk * ( btra(jpoxy) ) 
    3874 # endif 
    3875  
    3876                !!---------------------------------------------------------------------- 
    3877                !! Apply calculated tracer fluxes 
    3878                !!---------------------------------------------------------------------- 
    3879                !! 
    3880                !! units: [unit of tracer] per second (fluxes are calculated above per day) 
    3881                !! 
    3882                ibio_switch = 1 
    3883 # if defined key_gulf_finland 
    3884                !! AXY (17/05/13): fudge in a Gulf of Finland correction; uses longitude- 
    3885                !!                 latitude range to establish if this is a Gulf of Finland  
    3886                !!                 grid cell; if so, then BGC fluxes are ignored (though  
    3887                !!                 still calculated); for reference, this is meant to be a  
    3888                !!                 temporary fix to see if all of my problems can be done  
    3889                !!                 away with if I switch off BGC fluxes in the Gulf of  
    3890                !!                 Finland, which currently appears the source of trouble 
    3891                if ( glamt(ji,jj).gt.24.7 .and. glamt(ji,jj).lt.27.8 .and. & 
    3892                   &   gphit(ji,jj).gt.59.2 .and. gphit(ji,jj).lt.60.2 ) then 
    3893                   ibio_switch = 0 
    3894                endif 
    3895 # endif                
    3896                if (ibio_switch.eq.1) then 
    3897                   tra(ji,jj,jk,jpchn) = tra(ji,jj,jk,jpchn) + (btra(jpchn) / 86400.) 
    3898                   tra(ji,jj,jk,jpchd) = tra(ji,jj,jk,jpchd) + (btra(jpchd) / 86400.) 
    3899                   tra(ji,jj,jk,jpphn) = tra(ji,jj,jk,jpphn) + (btra(jpphn) / 86400.) 
    3900                   tra(ji,jj,jk,jpphd) = tra(ji,jj,jk,jpphd) + (btra(jpphd) / 86400.) 
    3901                   tra(ji,jj,jk,jppds) = tra(ji,jj,jk,jppds) + (btra(jppds) / 86400.) 
    3902                   tra(ji,jj,jk,jpzmi) = tra(ji,jj,jk,jpzmi) + (btra(jpzmi) / 86400.) 
    3903                   tra(ji,jj,jk,jpzme) = tra(ji,jj,jk,jpzme) + (btra(jpzme) / 86400.) 
    3904                   tra(ji,jj,jk,jpdet) = tra(ji,jj,jk,jpdet) + (btra(jpdet) / 86400.) 
    3905                   tra(ji,jj,jk,jpdin) = tra(ji,jj,jk,jpdin) + (btra(jpdin) / 86400.) 
    3906                   tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) + (btra(jpsil) / 86400.) 
    3907                   tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + (btra(jpfer) / 86400.) 
    3908 # if defined key_roam 
    3909                   tra(ji,jj,jk,jpdtc) = tra(ji,jj,jk,jpdtc) + (btra(jpdtc) / 86400.) 
    3910                   tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + (btra(jpdic) / 86400.) 
    3911                   tra(ji,jj,jk,jpalk) = tra(ji,jj,jk,jpalk) + (btra(jpalk) / 86400.) 
    3912                   tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + (btra(jpoxy) / 86400.) 
    3913 # endif 
    3914                endif                
    3915  
    3916                !! AXY (18/11/16): CMIP6 diagnostics 
    3917                IF( med_diag%FBDDTALK%dgsave )  THEN 
    3918                   fbddtalk(ji,jj)  =  fbddtalk(ji,jj)  + (btra(jpalk) * fthk) 
    3919                ENDIF 
    3920                IF( med_diag%FBDDTDIC%dgsave )  THEN 
    3921                   fbddtdic(ji,jj)  =  fbddtdic(ji,jj)  + (btra(jpdic) * fthk) 
    3922                ENDIF 
    3923                IF( med_diag%FBDDTDIFE%dgsave ) THEN 
    3924                   fbddtdife(ji,jj) =  fbddtdife(ji,jj) + (btra(jpfer) * fthk) 
    3925                ENDIF 
    3926                IF( med_diag%FBDDTDIN%dgsave )  THEN 
    3927                   fbddtdin(ji,jj)  =  fbddtdin(ji,jj)  + (btra(jpdin) * fthk) 
    3928                ENDIF 
    3929                IF( med_diag%FBDDTDISI%dgsave ) THEN 
    3930                   fbddtdisi(ji,jj) =  fbddtdisi(ji,jj) + (btra(jpsil) * fthk) 
    3931                ENDIF 
    3932           !! 
    3933                IF( med_diag%BDDTALK3%dgsave )  THEN 
    3934                   bddtalk3(ji,jj,jk)  =  btra(jpalk) 
    3935                ENDIF 
    3936                IF( med_diag%BDDTDIC3%dgsave )  THEN 
    3937                   bddtdic3(ji,jj,jk)  =  btra(jpdic) 
    3938                ENDIF 
    3939                IF( med_diag%BDDTDIFE3%dgsave ) THEN 
    3940                   bddtdife3(ji,jj,jk) =  btra(jpfer) 
    3941                ENDIF 
    3942                IF( med_diag%BDDTDIN3%dgsave )  THEN 
    3943                   bddtdin3(ji,jj,jk)  =  btra(jpdin) 
    3944                ENDIF 
    3945                IF( med_diag%BDDTDISI3%dgsave ) THEN 
    3946                   bddtdisi3(ji,jj,jk) =  btra(jpsil) 
    3947                ENDIF 
    3948  
     3532                !!    endif 
     3533                !! endif      
     3534 
     3535                IF( lk_iomput  .AND.  .NOT.  ln_diatrc  ) THEN 
     3536                   !!---------------------------------------------------------------------- 
     3537                   !! Add in XML diagnostics stuff 
     3538                   !!---------------------------------------------------------------------- 
     3539                   !! 
     3540                   !! ** 2D diagnostics 
    39493541#   if defined key_debug_medusa 
    3950                IF (lwp) write (numout,*) '------' 
    3951                IF (lwp) write (numout,*) 'trc_bio_medusa: end all calculations' 
    3952                IF (lwp) write (numout,*) 'trc_bio_medusa: now outputs' 
    3953                      CALL flush(numout) 
     3542                   IF ( lwp ) write (numout,*) 'trc_bio_medusa: diag in ij-jj-jk loop' 
     3543                   CALL flush(numout) 
    39543544#   endif 
    3955  
    3956 # if defined key_axy_nancheck 
    3957                !!---------------------------------------------------------------------- 
    3958                !! Check calculated tracer fluxes 
    3959                !!---------------------------------------------------------------------- 
    3960                !! 
    3961                DO jn = 1,jptra 
    3962                   fq0 = btra(jn) 
    3963                   !! AXY (30/01/14): "isnan" problem on HECTOR 
    3964                   !! if (fq0 /= fq0 ) then 
    3965                   if ( ieee_is_nan( fq0 ) ) then 
    3966                      !! there's a NaN here 
    3967                      if (lwp) write(numout,*) 'NAN detected in btra(', ji, ',', & 
    3968                      & jj, ',', jk, ',', jn, ') at time', kt 
    3969            CALL ctl_stop( 'trcbio_medusa, NAN in btra field' ) 
    3970                   endif 
    3971                ENDDO 
    3972                DO jn = 1,jptra 
    3973                   fq0 = tra(ji,jj,jk,jn) 
    3974                   !! AXY (30/01/14): "isnan" problem on HECTOR 
    3975                   !! if (fq0 /= fq0 ) then 
    3976                   if ( ieee_is_nan( fq0 ) ) then 
    3977                      !! there's a NaN here 
    3978                      if (lwp) write(numout,*) 'NAN detected in tra(', ji, ',', & 
    3979                      & jj, ',', jk, ',', jn, ') at time', kt 
    3980               CALL ctl_stop( 'trcbio_medusa, NAN in tra field' ) 
    3981                   endif 
    3982                ENDDO 
    3983                CALL flush(numout) 
    3984 # endif 
    3985  
    3986                !!---------------------------------------------------------------------- 
    3987                !! Check model conservation 
    3988                !! these terms merely sum up the tendency terms of the relevant 
    3989                !! state variables, which should sum to zero; the iron cycle is 
    3990                !! complicated by fluxes that add (aeolian deposition and seafloor 
    3991                !! remineralisation) and remove (scavenging) dissolved iron from 
    3992                !! the model (i.e. the sum of iron fluxes is unlikely to be zero) 
    3993                !!---------------------------------------------------------------------- 
    3994                !! 
    3995                !! fnit0 = btra(jpphn) + btra(jpphd) + btra(jpzmi) + btra(jpzme) + btra(jpdet) + btra(jpdin)  ! + ftempn 
    3996                !! fsil0 = btra(jppds) + btra(jpsil)                              ! + ftempsi 
    3997                !! ffer0 = (xrfn * fnit0) + btra(jpfer) 
    3998 # if defined key_roam 
    3999                !! fcar0 = 0. 
    4000                !! falk0 = 0. 
    4001                !! foxy0 = 0. 
    4002 # endif 
    4003                !! 
    4004                !! if (kt/240*240.eq.kt) then 
    4005                !!    if (ji.eq.2.and.jj.eq.2.and.jk.eq.1) then 
    4006                !!       IF (lwp) write (*,*) '*******!MEDUSA Conservation!*******',kt 
    4007 # if defined key_roam 
    4008                !!       IF (lwp) write (*,*) fnit0,fsil0,ffer0,fcar0,falk0,foxy0 
    4009 # else 
    4010                !!       IF (lwp) write (*,*) fnit0,fsil0,ffer0 
    4011 # endif 
    4012                !!    endif 
    4013                !! endif      
    4014  
    4015 # if defined key_trc_diabio 
    4016                !!====================================================================== 
    4017                !! LOCAL GRID CELL DIAGNOSTICS 
    4018                !!====================================================================== 
    4019                !! 
    4020                !!---------------------------------------------------------------------- 
    4021                !! Full diagnostics key_trc_diabio: 
    4022                !! LOBSTER and PISCES support full diagnistics option key_trc_diabio     
    4023                !! which gives an option of FULL output of biological sourses and sinks. 
    4024                !! I cannot see any reason for doing this. If needed, it can be done 
    4025                !! as shown below. 
    4026                !!---------------------------------------------------------------------- 
    4027                !! 
    4028                IF(lwp) WRITE(numout,*) ' MEDUSA does not support key_trc_diabio' 
    4029                !!               trbio(ji,jj,jk, 1) = fprn 
    4030 # endif 
    4031  
    4032                IF( lk_iomput  .AND.  .NOT.  ln_diatrc  ) THEN 
    4033          !!---------------------------------------------------------------------- 
    4034          !! Add in XML diagnostics stuff 
    4035          !!---------------------------------------------------------------------- 
    4036          !! 
    4037          !! ** 2D diagnostics 
    4038 #   if defined key_debug_medusa 
    4039                   IF (lwp) write (numout,*) 'trc_bio_medusa: diag in ij-jj-jk loop' 
    4040                   CALL flush(numout) 
    4041 #   endif 
    4042                   IF ( med_diag%PRN%dgsave ) THEN 
     3545                   IF ( med_diag%PRN%dgsave ) THEN 
    40433546                      fprn2d(ji,jj) = fprn2d(ji,jj) + (fprn  * zphn * fthk)  
    4044                   ENDIF 
    4045                   IF ( med_diag%MPN%dgsave ) THEN 
     3547                   ENDIF 
     3548                   IF ( med_diag%MPN%dgsave ) THEN 
    40463549                      fdpn2d(ji,jj) = fdpn2d(ji,jj) + (fdpn         * fthk) 
    4047                   ENDIF 
    4048                   IF ( med_diag%PRD%dgsave ) THEN 
     3550                   ENDIF 
     3551                   IF ( med_diag%PRD%dgsave ) THEN 
    40493552                      fprd2d(ji,jj) = fprd2d(ji,jj) + (fprd  * zphd * fthk) 
    4050                   ENDIF 
    4051                   IF( med_diag%MPD%dgsave ) THEN 
     3553                   ENDIF 
     3554                   IF( med_diag%MPD%dgsave ) THEN 
    40523555                      fdpd2d(ji,jj) = fdpd2d(ji,jj) + (fdpd         * fthk)  
    4053                   ENDIF 
    4054                   !  IF( med_diag%DSED%dgsave ) THEN 
    4055                   !      CALL iom_put( "DSED"  , ftot_n ) 
    4056                   !  ENDIF 
    4057                   IF( med_diag%OPAL%dgsave ) THEN 
     3556                   ENDIF 
     3557                   !  IF( med_diag%DSED%dgsave ) THEN 
     3558                   !      CALL iom_put( "DSED"  , ftot_n ) 
     3559                   !  ENDIF 
     3560                   IF( med_diag%OPAL%dgsave ) THEN 
    40583561                      fprds2d(ji,jj) = fprds2d(ji,jj) + (fprds * zpds * fthk)  
    4059                   ENDIF 
    4060                   IF( med_diag%OPALDISS%dgsave ) THEN 
     3562                   ENDIF 
     3563                   IF( med_diag%OPALDISS%dgsave ) THEN 
    40613564                      fsdiss2d(ji,jj) = fsdiss2d(ji,jj) + (fsdiss  * fthk)   
    4062                   ENDIF 
    4063                   IF( med_diag%GMIPn%dgsave ) THEN 
     3565                   ENDIF 
     3566                   IF( med_diag%GMIPn%dgsave ) THEN 
    40643567                      fgmipn2d(ji,jj) = fgmipn2d(ji,jj) + (fgmipn  * fthk)  
    4065                   ENDIF 
    4066                   IF( med_diag%GMID%dgsave ) THEN 
     3568                   ENDIF 
     3569                   IF( med_diag%GMID%dgsave ) THEN 
    40673570                      fgmid2d(ji,jj) = fgmid2d(ji,jj) + (fgmid   * fthk)  
    4068                   ENDIF 
    4069                   IF( med_diag%MZMI%dgsave ) THEN 
     3571                   ENDIF 
     3572                   IF( med_diag%MZMI%dgsave ) THEN 
    40703573                      fdzmi2d(ji,jj) = fdzmi2d(ji,jj) + (fdzmi   * fthk)  
    4071                   ENDIF 
    4072                   IF( med_diag%GMEPN%dgsave ) THEN 
     3574                   ENDIF 
     3575                   IF( med_diag%GMEPN%dgsave ) THEN 
    40733576                      fgmepn2d(ji,jj) = fgmepn2d(ji,jj) + (fgmepn  * fthk) 
    4074                   ENDIF 
    4075                   IF( med_diag%GMEPD%dgsave ) THEN 
     3577                   ENDIF 
     3578                   IF( med_diag%GMEPD%dgsave ) THEN 
    40763579                      fgmepd2d(ji,jj) = fgmepd2d(ji,jj) + (fgmepd  * fthk)  
    4077                   ENDIF 
    4078                   IF( med_diag%GMEZMI%dgsave ) THEN 
     3580                   ENDIF 
     3581                   IF( med_diag%GMEZMI%dgsave ) THEN 
    40793582                      fgmezmi2d(ji,jj) = fgmezmi2d(ji,jj) + (fgmezmi * fthk)  
    4080                   ENDIF 
    4081                   IF( med_diag%GMED%dgsave ) THEN 
     3583                   ENDIF 
     3584                   IF( med_diag%GMED%dgsave ) THEN 
    40823585                      fgmed2d(ji,jj) = fgmed2d(ji,jj) + (fgmed   * fthk)  
    4083                   ENDIF 
    4084                   IF( med_diag%MZME%dgsave ) THEN 
     3586                   ENDIF 
     3587                   IF( med_diag%MZME%dgsave ) THEN 
    40853588                      fdzme2d(ji,jj) = fdzme2d(ji,jj) + (fdzme   * fthk)  
    4086                   ENDIF 
    4087                   !  IF( med_diag%DEXP%dgsave ) THEN 
    4088                   !      CALL iom_put( "DEXP"  , ftot_n ) 
    4089                   !  ENDIF 
    4090                   IF( med_diag%DETN%dgsave ) THEN 
     3589                   ENDIF 
     3590                   !  IF( med_diag%DEXP%dgsave ) THEN 
     3591                   !      CALL iom_put( "DEXP"  , ftot_n ) 
     3592                   !  ENDIF 
     3593                   IF( med_diag%DETN%dgsave ) THEN 
    40913594                      fslown2d(ji,jj) = fslown2d(ji,jj) + (fslown  * fthk)   
    4092                   ENDIF 
    4093                   IF( med_diag%MDET%dgsave ) THEN 
     3595                   ENDIF 
     3596                   IF( med_diag%MDET%dgsave ) THEN 
    40943597                      fdd2d(ji,jj) = fdd2d(ji,jj) + (fdd     * fthk)  
    4095                   ENDIF 
    4096                   IF( med_diag%AEOLIAN%dgsave ) THEN 
     3598                   ENDIF 
     3599                   IF( med_diag%AEOLIAN%dgsave ) THEN 
    40973600                      ffetop2d(ji,jj) = ffetop2d(ji,jj) + (ffetop  * fthk)  
    4098                   ENDIF 
    4099                   IF( med_diag%BENTHIC%dgsave ) THEN 
     3601                   ENDIF 
     3602                   IF( med_diag%BENTHIC%dgsave ) THEN 
    41003603                      ffebot2d(ji,jj) = ffebot2d(ji,jj) + (ffebot  * fthk)  
    4101                   ENDIF 
    4102                   IF( med_diag%SCAVENGE%dgsave ) THEN 
     3604                   ENDIF 
     3605                   IF( med_diag%SCAVENGE%dgsave ) THEN 
    41033606                      ffescav2d(ji,jj) = ffescav2d(ji,jj) + (ffescav * fthk)   
    4104                   ENDIF 
    4105                   IF( med_diag%PN_JLIM%dgsave ) THEN 
     3607                   ENDIF 
     3608                   IF( med_diag%PN_JLIM%dgsave ) THEN 
    41063609                      ! fjln2d(ji,jj) = fjln2d(ji,jj) + (fjln  * zphn * fthk)  
    41073610                      fjln2d(ji,jj) = fjln2d(ji,jj) + (fjlim_pn * zphn * fthk)  
    4108                   ENDIF 
    4109                   IF( med_diag%PN_NLIM%dgsave ) THEN 
     3611                   ENDIF 
     3612                   IF( med_diag%PN_NLIM%dgsave ) THEN 
    41103613                      fnln2d(ji,jj) = fnln2d(ji,jj) + (fnln  * zphn * fthk)  
    4111                   ENDIF 
    4112                   IF( med_diag%PN_FELIM%dgsave ) THEN 
     3614                   ENDIF 
     3615                   IF( med_diag%PN_FELIM%dgsave ) THEN 
    41133616                      ffln2d(ji,jj) = ffln2d(ji,jj) + (ffln  * zphn * fthk)  
    4114                   ENDIF 
    4115                   IF( med_diag%PD_JLIM%dgsave ) THEN 
     3617                   ENDIF 
     3618                   IF( med_diag%PD_JLIM%dgsave ) THEN 
    41163619                      ! fjld2d(ji,jj) = fjld2d(ji,jj) + (fjld  * zphd * fthk)  
    41173620                      fjld2d(ji,jj) = fjld2d(ji,jj) + (fjlim_pd * zphd * fthk)  
    4118                   ENDIF 
    4119                   IF( med_diag%PD_NLIM%dgsave ) THEN 
     3621                   ENDIF 
     3622                   IF( med_diag%PD_NLIM%dgsave ) THEN 
    41203623                      fnld2d(ji,jj) = fnld2d(ji,jj) + (fnld  * zphd * fthk)  
    4121                   ENDIF 
    4122                   IF( med_diag%PD_FELIM%dgsave ) THEN 
     3624                   ENDIF 
     3625                   IF( med_diag%PD_FELIM%dgsave ) THEN 
    41233626                      ffld2d(ji,jj) = ffld2d(ji,jj) + (ffld  * zphd * fthk)  
    4124                   ENDIF 
    4125                   IF( med_diag%PD_SILIM%dgsave ) THEN 
     3627                   ENDIF 
     3628                   IF( med_diag%PD_SILIM%dgsave ) THEN 
    41263629                      fsld2d2(ji,jj) = fsld2d2(ji,jj) + (fsld2 * zphd * fthk)  
    4127                   ENDIF 
    4128                   IF( med_diag%PDSILIM2%dgsave ) THEN 
     3630                   ENDIF 
     3631                   IF( med_diag%PDSILIM2%dgsave ) THEN 
    41293632                      fsld2d(ji,jj) = fsld2d(ji,jj) + (fsld  * zphd * fthk) 
    4130                   ENDIF 
    4131                   !!  
    4132                   IF( med_diag%TOTREG_N%dgsave ) THEN 
     3633                   ENDIF 
     3634                   !!  
     3635                   IF( med_diag%TOTREG_N%dgsave ) THEN 
    41333636                      fregen2d(ji,jj) = fregen2d(ji,jj) + fregen 
    4134                   ENDIF 
    4135                   IF( med_diag%TOTRG_SI%dgsave ) THEN 
     3637                   ENDIF 
     3638                   IF( med_diag%TOTRG_SI%dgsave ) THEN 
    41363639                      fregensi2d(ji,jj) = fregensi2d(ji,jj) + fregensi 
    4137                   ENDIF 
    4138                   !!  
    4139                   IF( med_diag%FASTN%dgsave ) THEN 
     3640                   ENDIF 
     3641                   !!  
     3642                   IF( med_diag%FASTN%dgsave ) THEN 
    41403643                      ftempn2d(ji,jj) = ftempn2d(ji,jj) + (ftempn  * fthk) 
    4141                   ENDIF 
    4142                   IF( med_diag%FASTSI%dgsave ) THEN 
     3644                   ENDIF 
     3645                   IF( med_diag%FASTSI%dgsave ) THEN 
    41433646                      ftempsi2d(ji,jj) = ftempsi2d(ji,jj) + (ftempsi * fthk) 
    4144                   ENDIF 
    4145                   IF( med_diag%FASTFE%dgsave ) THEN 
     3647                   ENDIF 
     3648                   IF( med_diag%FASTFE%dgsave ) THEN 
    41463649                      ftempfe2d(ji,jj) =ftempfe2d(ji,jj)  + (ftempfe * fthk)   
    4147                   ENDIF 
    4148                   IF( med_diag%FASTC%dgsave ) THEN 
     3650                   ENDIF 
     3651                   IF( med_diag%FASTC%dgsave ) THEN 
    41493652                      ftempc2d(ji,jj) = ftempc2d(ji,jj) + (ftempc  * fthk) 
    4150                   ENDIF 
    4151                   IF( med_diag%FASTCA%dgsave ) THEN 
     3653                   ENDIF 
     3654                   IF( med_diag%FASTCA%dgsave ) THEN 
    41523655                      ftempca2d(ji,jj) = ftempca2d(ji,jj) + (ftempca * fthk) 
    4153                   ENDIF 
    4154                   !!  
    4155                   IF( med_diag%REMINN%dgsave ) THEN 
     3656                   ENDIF 
     3657                   !!  
     3658                   IF( med_diag%REMINN%dgsave ) THEN 
    41563659                      freminn2d(ji,jj) = freminn2d(ji,jj) + (freminn  * fthk) 
    4157                   ENDIF 
    4158                   IF( med_diag%REMINSI%dgsave ) THEN 
     3660                   ENDIF 
     3661                   IF( med_diag%REMINSI%dgsave ) THEN 
    41593662                      freminsi2d(ji,jj) = freminsi2d(ji,jj) + (freminsi * fthk) 
    4160                   ENDIF 
    4161                   IF( med_diag%REMINFE%dgsave ) THEN 
     3663                   ENDIF 
     3664                   IF( med_diag%REMINFE%dgsave ) THEN 
    41623665                      freminfe2d(ji,jj)= freminfe2d(ji,jj) + (freminfe * fthk)  
    4163                   ENDIF 
    4164                   IF( med_diag%REMINC%dgsave ) THEN 
     3666                   ENDIF 
     3667                   IF( med_diag%REMINC%dgsave ) THEN 
    41653668                      freminc2d(ji,jj) = freminc2d(ji,jj) + (freminc  * fthk)  
    4166                   ENDIF 
    4167                   IF( med_diag%REMINCA%dgsave ) THEN 
     3669                   ENDIF 
     3670                   IF( med_diag%REMINCA%dgsave ) THEN 
    41683671                      freminca2d(ji,jj) = freminca2d(ji,jj) + (freminca * fthk)  
    4169                   ENDIF 
    4170                   !! 
     3672                   ENDIF 
     3673                   !! 
    41713674# if defined key_roam 
    4172                   !! 
    4173                   !! AXY (09/11/16): CMIP6 diagnostics 
    4174                   IF( med_diag%FD_NIT3%dgsave ) THEN 
    4175                      fd_nit3(ji,jj,jk) = ffastn(ji,jj) 
    4176                   ENDIF 
    4177                   IF( med_diag%FD_SIL3%dgsave ) THEN 
    4178                      fd_sil3(ji,jj,jk) = ffastsi(ji,jj) 
    4179                   ENDIF 
    4180                   IF( med_diag%FD_CAR3%dgsave ) THEN 
    4181                      fd_car3(ji,jj,jk) = ffastc(ji,jj) 
    4182                   ENDIF 
    4183                   IF( med_diag%FD_CAL3%dgsave ) THEN 
    4184                      fd_cal3(ji,jj,jk) = ffastca(ji,jj) 
    4185                   ENDIF 
    4186                   !! 
    4187                   IF (jk.eq.i0100) THEN 
    4188                      IF( med_diag%RR_0100%dgsave ) THEN 
    4189                         ffastca2d(ji,jj) =   & 
    4190                         ffastca(ji,jj)/MAX(ffastc(ji,jj), rsmall) 
    4191                      ENDIF                      
    4192                   ELSE IF (jk.eq.i0500) THEN  
    4193                      IF( med_diag%RR_0500%dgsave ) THEN 
    4194                         ffastca2d(ji,jj) =   & 
    4195                         ffastca(ji,jj)/MAX(ffastc(ji,jj), rsmall) 
    4196                      ENDIF                         
    4197                   ELSE IF (jk.eq.i1000) THEN 
    4198                      IF( med_diag%RR_1000%dgsave ) THEN 
    4199                         ffastca2d(ji,jj) =   & 
    4200                         ffastca(ji,jj)/MAX(ffastc(ji,jj), rsmall) 
    4201                      ENDIF 
    4202                   ELSE IF (jk.eq.jmbathy) THEN 
    4203                      IF( med_diag%IBEN_N%dgsave ) THEN 
    4204                         iben_n2d(ji,jj) = f_sbenin_n(ji,jj)  + f_fbenin_n(ji,jj) 
    4205                      ENDIF 
    4206                      IF( med_diag%IBEN_FE%dgsave ) THEN 
    4207                         iben_fe2d(ji,jj) = f_sbenin_fe(ji,jj) + f_fbenin_fe(ji,jj) 
    4208                      ENDIF 
    4209                      IF( med_diag%IBEN_C%dgsave ) THEN 
    4210                         iben_c2d(ji,jj) = f_sbenin_c(ji,jj)  + f_fbenin_c(ji,jj) 
    4211                      ENDIF 
    4212                      IF( med_diag%IBEN_SI%dgsave ) THEN 
    4213                         iben_si2d(ji,jj) = f_fbenin_si(ji,jj) 
    4214                      ENDIF 
    4215                      IF( med_diag%IBEN_CA%dgsave ) THEN 
    4216                         iben_ca2d(ji,jj) = f_fbenin_ca(ji,jj) 
    4217                      ENDIF 
    4218                      IF( med_diag%OBEN_N%dgsave ) THEN 
    4219                         oben_n2d(ji,jj) = f_benout_n(ji,jj) 
    4220                      ENDIF 
    4221                      IF( med_diag%OBEN_FE%dgsave ) THEN 
    4222                         oben_fe2d(ji,jj) = f_benout_fe(ji,jj) 
    4223                      ENDIF 
    4224                      IF( med_diag%OBEN_C%dgsave ) THEN 
    4225                         oben_c2d(ji,jj) = f_benout_c(ji,jj) 
    4226                      ENDIF 
    4227                      IF( med_diag%OBEN_SI%dgsave ) THEN 
    4228                         oben_si2d(ji,jj) = f_benout_si(ji,jj) 
    4229                      ENDIF 
    4230                      IF( med_diag%OBEN_CA%dgsave ) THEN 
    4231                         oben_ca2d(ji,jj) = f_benout_ca(ji,jj) 
    4232                      ENDIF 
    4233                      IF( med_diag%SFR_OCAL%dgsave ) THEN 
    4234                         sfr_ocal2d(ji,jj) = f3_omcal(ji,jj,jk) 
    4235                      ENDIF 
    4236                      IF( med_diag%SFR_OARG%dgsave ) THEN 
    4237                         sfr_oarg2d(ji,jj) =  f3_omarg(ji,jj,jk) 
    4238                      ENDIF 
    4239                      IF( med_diag%LYSO_CA%dgsave ) THEN 
    4240                         lyso_ca2d(ji,jj) = f_benout_lyso_ca(ji,jj) 
    4241                      ENDIF 
    4242                   ENDIF 
    4243                   !! end bathy-1 diags 
    4244                   !! 
    4245                   IF( med_diag%RIV_N%dgsave ) THEN 
    4246                      rivn2d(ji,jj) = rivn2d(ji,jj) +  (f_riv_loc_n * fthk) 
    4247                   ENDIF 
    4248                   IF( med_diag%RIV_SI%dgsave ) THEN 
    4249                      rivsi2d(ji,jj) = rivsi2d(ji,jj) +  (f_riv_loc_si * fthk) 
    4250                   ENDIF 
    4251                   IF( med_diag%RIV_C%dgsave ) THEN 
    4252                      rivc2d(ji,jj) = rivc2d(ji,jj) +  (f_riv_loc_c * fthk) 
    4253                   ENDIF 
    4254                   IF( med_diag%RIV_ALK%dgsave ) THEN 
    4255                      rivalk2d(ji,jj) = rivalk2d(ji,jj) +  (f_riv_loc_alk * fthk) 
    4256                   ENDIF 
    4257                   IF( med_diag%DETC%dgsave ) THEN 
    4258                      fslowc2d(ji,jj) = fslowc2d(ji,jj) + (fslowc  * fthk)    
    4259                   ENDIF 
    4260                   !!  
    4261                   !!               
    4262                   !! 
    4263                   IF( med_diag%PN_LLOSS%dgsave ) THEN 
    4264                      fdpn22d(ji,jj) = fdpn22d(ji,jj) + (fdpn2  * fthk) 
    4265                   ENDIF 
    4266                   IF( med_diag%PD_LLOSS%dgsave ) THEN 
    4267                      fdpd22d(ji,jj) = fdpd22d(ji,jj) + (fdpd2  * fthk) 
    4268                   ENDIF 
    4269                   IF( med_diag%ZI_LLOSS%dgsave ) THEN 
    4270                      fdzmi22d(ji,jj) = fdzmi22d(ji,jj) + (fdzmi2 * fthk) 
    4271                   ENDIF 
    4272                   IF( med_diag%ZE_LLOSS%dgsave ) THEN 
    4273                      fdzme22d(ji,jj) = fdzme22d(ji,jj) + (fdzme2 * fthk) 
    4274                   ENDIF 
    4275                   IF( med_diag%ZI_MES_N%dgsave ) THEN 
    4276                      zimesn2d(ji,jj) = zimesn2d(ji,jj) +  & 
    4277                      (xphi * (fgmipn + fgmid) * fthk) 
    4278                   ENDIF 
    4279                   IF( med_diag%ZI_MES_D%dgsave ) THEN 
    4280                      zimesd2d(ji,jj) = zimesd2d(ji,jj) + &  
    4281                      ((1. - xbetan) * finmi * fthk) 
    4282                   ENDIF 
    4283                   IF( med_diag%ZI_MES_C%dgsave ) THEN 
    4284                      zimesc2d(ji,jj) = zimesc2d(ji,jj) + & 
    4285                      (xphi * ((xthetapn * fgmipn) + fgmidc) * fthk) 
    4286                   ENDIF 
    4287                   IF( med_diag%ZI_MESDC%dgsave ) THEN 
    4288                      zimesdc2d(ji,jj) = zimesdc2d(ji,jj) + & 
    4289                      ((1. - xbetac) * ficmi * fthk) 
    4290                   ENDIF 
    4291                   IF( med_diag%ZI_EXCR%dgsave ) THEN 
    4292                      ziexcr2d(ji,jj) = ziexcr2d(ji,jj) +  (fmiexcr * fthk) 
    4293                   ENDIF 
    4294                   IF( med_diag%ZI_RESP%dgsave ) THEN 
    4295                      ziresp2d(ji,jj) = ziresp2d(ji,jj) +  (fmiresp * fthk) 
    4296                   ENDIF 
    4297                   IF( med_diag%ZI_GROW%dgsave ) THEN 
    4298                      zigrow2d(ji,jj) = zigrow2d(ji,jj) + (fmigrow * fthk) 
    4299                   ENDIF 
    4300                   IF( med_diag%ZE_MES_N%dgsave ) THEN 
    4301                      zemesn2d(ji,jj) = zemesn2d(ji,jj) + & 
    4302                      (xphi * (fgmepn + fgmepd + fgmezmi + fgmed) * fthk) 
    4303                   ENDIF 
    4304                   IF( med_diag%ZE_MES_D%dgsave ) THEN 
    4305                      zemesd2d(ji,jj) = zemesd2d(ji,jj) + & 
    4306                      ((1. - xbetan) * finme * fthk) 
    4307                   ENDIF 
    4308                   IF( med_diag%ZE_MES_C%dgsave ) THEN 
    4309                      zemesc2d(ji,jj) = zemesc2d(ji,jj) +                         &  
    4310                      (xphi * ((xthetapn * fgmepn) + (xthetapd * fgmepd) +  & 
    4311                      (xthetazmi * fgmezmi) + fgmedc) * fthk) 
    4312                   ENDIF 
    4313                   IF( med_diag%ZE_MESDC%dgsave ) THEN 
    4314                      zemesdc2d(ji,jj) = zemesdc2d(ji,jj) +  & 
    4315                      ((1. - xbetac) * ficme * fthk) 
    4316                   ENDIF 
    4317                   IF( med_diag%ZE_EXCR%dgsave ) THEN 
    4318                      zeexcr2d(ji,jj) = zeexcr2d(ji,jj) + (fmeexcr * fthk) 
    4319                   ENDIF 
    4320                   IF( med_diag%ZE_RESP%dgsave ) THEN 
    4321                      zeresp2d(ji,jj) = zeresp2d(ji,jj) + (fmeresp * fthk) 
    4322                   ENDIF 
    4323                   IF( med_diag%ZE_GROW%dgsave ) THEN 
    4324                      zegrow2d(ji,jj) = zegrow2d(ji,jj) + (fmegrow * fthk) 
    4325                   ENDIF 
    4326                   IF( med_diag%MDETC%dgsave ) THEN 
    4327                      mdetc2d(ji,jj) = mdetc2d(ji,jj) + (fddc * fthk) 
    4328                   ENDIF 
    4329                   IF( med_diag%GMIDC%dgsave ) THEN 
    4330                      gmidc2d(ji,jj) = gmidc2d(ji,jj) + (fgmidc * fthk) 
    4331                   ENDIF 
    4332                   IF( med_diag%GMEDC%dgsave ) THEN 
    4333                      gmedc2d(ji,jj) = gmedc2d(ji,jj) + (fgmedc  * fthk) 
    4334                   ENDIF 
    4335                   !! 
     3675                   !! 
     3676                   !! AXY (09/11/16): CMIP6 diagnostics 
     3677                   IF( med_diag%FD_NIT3%dgsave ) THEN 
     3678                      fd_nit3(ji,jj,jk) = ffastn(ji,jj) 
     3679                   ENDIF 
     3680                   IF( med_diag%FD_SIL3%dgsave ) THEN 
     3681                      fd_sil3(ji,jj,jk) = ffastsi(ji,jj) 
     3682                   ENDIF 
     3683                   IF( med_diag%FD_CAR3%dgsave ) THEN 
     3684                      fd_car3(ji,jj,jk) = ffastc(ji,jj) 
     3685                   ENDIF 
     3686                   IF( med_diag%FD_CAL3%dgsave ) THEN 
     3687                      fd_cal3(ji,jj,jk) = ffastca(ji,jj) 
     3688                   ENDIF 
     3689                   !! 
     3690                   IF (jk.eq.i0100) THEN 
     3691                      IF( med_diag%RR_0100%dgsave ) THEN 
     3692                         ffastca2d(ji,jj) =   & 
     3693                              ffastca(ji,jj)/MAX(ffastc(ji,jj), rsmall) 
     3694                      ENDIF 
     3695                   ELSE IF (jk.eq.i0500) THEN  
     3696                      IF( med_diag%RR_0500%dgsave ) THEN 
     3697                         ffastca2d(ji,jj) =   & 
     3698                              ffastca(ji,jj)/MAX(ffastc(ji,jj), rsmall) 
     3699                      ENDIF 
     3700                   ELSE IF (jk.eq.i1000) THEN 
     3701                      IF( med_diag%RR_1000%dgsave ) THEN 
     3702                         ffastca2d(ji,jj) =   & 
     3703                              ffastca(ji,jj)/MAX(ffastc(ji,jj), rsmall) 
     3704                      ENDIF 
     3705                   ELSE IF (jk.eq.jmbathy) THEN 
     3706                      IF( med_diag%IBEN_N%dgsave ) THEN 
     3707                         iben_n2d(ji,jj) = f_sbenin_n(ji,jj)  + f_fbenin_n(ji,jj) 
     3708                      ENDIF 
     3709                      IF( med_diag%IBEN_FE%dgsave ) THEN 
     3710                         iben_fe2d(ji,jj) = f_sbenin_fe(ji,jj) + f_fbenin_fe(ji,jj) 
     3711                      ENDIF 
     3712                      IF( med_diag%IBEN_C%dgsave ) THEN 
     3713                         iben_c2d(ji,jj) = f_sbenin_c(ji,jj)  + f_fbenin_c(ji,jj) 
     3714                      ENDIF 
     3715                      IF( med_diag%IBEN_SI%dgsave ) THEN 
     3716                         iben_si2d(ji,jj) = f_fbenin_si(ji,jj) 
     3717                      ENDIF 
     3718                      IF( med_diag%IBEN_CA%dgsave ) THEN 
     3719                         iben_ca2d(ji,jj) = f_fbenin_ca(ji,jj) 
     3720                      ENDIF 
     3721                      IF( med_diag%OBEN_N%dgsave ) THEN 
     3722                         oben_n2d(ji,jj) = f_benout_n(ji,jj) 
     3723                      ENDIF 
     3724                      IF( med_diag%OBEN_FE%dgsave ) THEN 
     3725                         oben_fe2d(ji,jj) = f_benout_fe(ji,jj) 
     3726                      ENDIF 
     3727                      IF( med_diag%OBEN_C%dgsave ) THEN 
     3728                         oben_c2d(ji,jj) = f_benout_c(ji,jj) 
     3729                      ENDIF 
     3730                      IF( med_diag%OBEN_SI%dgsave ) THEN 
     3731                         oben_si2d(ji,jj) = f_benout_si(ji,jj) 
     3732                      ENDIF 
     3733                      IF( med_diag%OBEN_CA%dgsave ) THEN 
     3734                         oben_ca2d(ji,jj) = f_benout_ca(ji,jj) 
     3735                      ENDIF 
     3736                      IF( med_diag%SFR_OCAL%dgsave ) THEN 
     3737                         sfr_ocal2d(ji,jj) = f3_omcal(ji,jj,jk) 
     3738                      ENDIF 
     3739                      IF( med_diag%SFR_OARG%dgsave ) THEN 
     3740                         sfr_oarg2d(ji,jj) =  f3_omarg(ji,jj,jk) 
     3741                      ENDIF 
     3742                      IF( med_diag%LYSO_CA%dgsave ) THEN 
     3743                         lyso_ca2d(ji,jj) = f_benout_lyso_ca(ji,jj) 
     3744                      ENDIF 
     3745                   ENDIF 
     3746                   !! end bathy-1 diags 
     3747                   !! 
     3748                   IF( med_diag%RIV_N%dgsave ) THEN 
     3749                      rivn2d(ji,jj) = rivn2d(ji,jj) +  (f_riv_loc_n * fthk) 
     3750                   ENDIF 
     3751                   IF( med_diag%RIV_SI%dgsave ) THEN 
     3752                      rivsi2d(ji,jj) = rivsi2d(ji,jj) +  (f_riv_loc_si * fthk) 
     3753                   ENDIF 
     3754                   IF( med_diag%RIV_C%dgsave ) THEN 
     3755                      rivc2d(ji,jj) = rivc2d(ji,jj) +  (f_riv_loc_c * fthk) 
     3756                   ENDIF 
     3757                   IF( med_diag%RIV_ALK%dgsave ) THEN 
     3758                      rivalk2d(ji,jj) = rivalk2d(ji,jj) +  (f_riv_loc_alk * fthk) 
     3759                   ENDIF 
     3760                   IF( med_diag%DETC%dgsave ) THEN 
     3761                      fslowc2d(ji,jj) = fslowc2d(ji,jj) + (fslowc  * fthk)    
     3762                   ENDIF 
     3763                   !!  
     3764                   !!               
     3765                   !! 
     3766                   IF( med_diag%PN_LLOSS%dgsave ) THEN 
     3767                      fdpn22d(ji,jj) = fdpn22d(ji,jj) + (fdpn2  * fthk) 
     3768                   ENDIF 
     3769                   IF( med_diag%PD_LLOSS%dgsave ) THEN 
     3770                      fdpd22d(ji,jj) = fdpd22d(ji,jj) + (fdpd2  * fthk) 
     3771                   ENDIF 
     3772                   IF( med_diag%ZI_LLOSS%dgsave ) THEN 
     3773                      fdzmi22d(ji,jj) = fdzmi22d(ji,jj) + (fdzmi2 * fthk) 
     3774                   ENDIF 
     3775                   IF( med_diag%ZE_LLOSS%dgsave ) THEN 
     3776                      fdzme22d(ji,jj) = fdzme22d(ji,jj) + (fdzme2 * fthk) 
     3777                   ENDIF 
     3778                   IF( med_diag%ZI_MES_N%dgsave ) THEN 
     3779                      zimesn2d(ji,jj) = zimesn2d(ji,jj) +  & 
     3780                           (xphi * (fgmipn + fgmid) * fthk) 
     3781                   ENDIF 
     3782                   IF( med_diag%ZI_MES_D%dgsave ) THEN 
     3783                      zimesd2d(ji,jj) = zimesd2d(ji,jj) + &  
     3784                           ((1. - xbetan) * finmi * fthk) 
     3785                   ENDIF 
     3786                   IF( med_diag%ZI_MES_C%dgsave ) THEN 
     3787                      zimesc2d(ji,jj) = zimesc2d(ji,jj) + & 
     3788                           (xphi * ((xthetapn * fgmipn) + fgmidc) * fthk) 
     3789                   ENDIF 
     3790                   IF( med_diag%ZI_MESDC%dgsave ) THEN 
     3791                      zimesdc2d(ji,jj) = zimesdc2d(ji,jj) + & 
     3792                           ((1. - xbetac) * ficmi * fthk) 
     3793                   ENDIF 
     3794                   IF( med_diag%ZI_EXCR%dgsave ) THEN 
     3795                      ziexcr2d(ji,jj) = ziexcr2d(ji,jj) +  (fmiexcr * fthk) 
     3796                   ENDIF 
     3797                   IF( med_diag%ZI_RESP%dgsave ) THEN 
     3798                      ziresp2d(ji,jj) = ziresp2d(ji,jj) +  (fmiresp * fthk) 
     3799                   ENDIF 
     3800                   IF( med_diag%ZI_GROW%dgsave ) THEN 
     3801                      zigrow2d(ji,jj) = zigrow2d(ji,jj) + (fmigrow * fthk) 
     3802                   ENDIF 
     3803                   IF( med_diag%ZE_MES_N%dgsave ) THEN 
     3804                      zemesn2d(ji,jj) = zemesn2d(ji,jj) + & 
     3805                           (xphi * (fgmepn + fgmepd + fgmezmi + fgmed) * fthk) 
     3806                   ENDIF 
     3807                   IF( med_diag%ZE_MES_D%dgsave ) THEN 
     3808                      zemesd2d(ji,jj) = zemesd2d(ji,jj) + & 
     3809                           ((1. - xbetan) * finme * fthk) 
     3810                   ENDIF 
     3811                   IF( med_diag%ZE_MES_C%dgsave ) THEN 
     3812                      zemesc2d(ji,jj) = zemesc2d(ji,jj) +                         &  
     3813                           (xphi * ((xthetapn * fgmepn) + (xthetapd * fgmepd) +  & 
     3814                           (xthetazmi * fgmezmi) + fgmedc) * fthk) 
     3815                   ENDIF 
     3816                   IF( med_diag%ZE_MESDC%dgsave ) THEN 
     3817                      zemesdc2d(ji,jj) = zemesdc2d(ji,jj) +  & 
     3818                           ((1. - xbetac) * ficme * fthk) 
     3819                   ENDIF 
     3820                   IF( med_diag%ZE_EXCR%dgsave ) THEN 
     3821                      zeexcr2d(ji,jj) = zeexcr2d(ji,jj) + (fmeexcr * fthk) 
     3822                   ENDIF 
     3823                   IF( med_diag%ZE_RESP%dgsave ) THEN 
     3824                      zeresp2d(ji,jj) = zeresp2d(ji,jj) + (fmeresp * fthk) 
     3825                   ENDIF 
     3826                   IF( med_diag%ZE_GROW%dgsave ) THEN 
     3827                      zegrow2d(ji,jj) = zegrow2d(ji,jj) + (fmegrow * fthk) 
     3828                   ENDIF 
     3829                   IF( med_diag%MDETC%dgsave ) THEN 
     3830                      mdetc2d(ji,jj) = mdetc2d(ji,jj) + (fddc * fthk) 
     3831                   ENDIF 
     3832                   IF( med_diag%GMIDC%dgsave ) THEN 
     3833                      gmidc2d(ji,jj) = gmidc2d(ji,jj) + (fgmidc * fthk) 
     3834                   ENDIF 
     3835                   IF( med_diag%GMEDC%dgsave ) THEN 
     3836                      gmedc2d(ji,jj) = gmedc2d(ji,jj) + (fgmedc  * fthk) 
     3837                   ENDIF 
     3838                   !! 
    43363839# endif                    
    4337                   !! 
    4338                   !! ** 3D diagnostics 
    4339                   IF( med_diag%TPP3%dgsave ) THEN 
    4340                      tpp3d(ji,jj,jk) =  (fprn * zphn) + (fprd * zphd) 
    4341                      !CALL iom_put( "TPP3"  , tpp3d ) 
    4342                   ENDIF 
    4343                   IF( med_diag%TPPD3%dgsave ) THEN 
    4344                      tppd3(ji,jj,jk) =  (fprd * zphd) 
    4345                   ENDIF 
    4346                    
    4347                   IF( med_diag%REMIN3N%dgsave ) THEN 
    4348                      remin3dn(ji,jj,jk) = fregen + (freminn * fthk) !! remineralisation 
    4349                      !CALL iom_put( "REMIN3N"  , remin3dn ) 
    4350                   ENDIF 
    4351                   !! IF( med_diag%PH3%dgsave ) THEN 
    4352                   !!     CALL iom_put( "PH3"  , f3_pH ) 
    4353                   !! ENDIF 
    4354                   !! IF( med_diag%OM_CAL3%dgsave ) THEN 
    4355                   !!     CALL iom_put( "OM_CAL3"  , f3_omcal ) 
    4356                   !! ENDIF 
    4357         !!  
    4358         !! AXY (09/11/16): CMIP6 diagnostics 
    4359         IF ( med_diag%DCALC3%dgsave   ) THEN 
    4360                      dcalc3(ji,jj,jk) = freminca 
    4361                   ENDIF 
    4362         IF ( med_diag%FEDISS3%dgsave  ) THEN 
    4363                      fediss3(ji,jj,jk) = ffetop 
    4364                   ENDIF 
    4365         IF ( med_diag%FESCAV3%dgsave  ) THEN 
    4366                      fescav3(ji,jj,jk) = ffescav 
    4367                   ENDIF 
    4368         IF ( med_diag%MIGRAZP3%dgsave ) THEN 
    4369                      migrazp3(ji,jj,jk) = fgmipn * xthetapn 
    4370                   ENDIF 
    4371         IF ( med_diag%MIGRAZD3%dgsave ) THEN 
    4372                      migrazd3(ji,jj,jk) = fgmidc 
    4373                   ENDIF 
    4374         IF ( med_diag%MEGRAZP3%dgsave ) THEN 
    4375                      megrazp3(ji,jj,jk) = (fgmepn * xthetapn) + (fgmepd * xthetapd) 
    4376                   ENDIF 
    4377         IF ( med_diag%MEGRAZD3%dgsave ) THEN 
    4378                      megrazd3(ji,jj,jk) = fgmedc 
    4379                   ENDIF 
    4380         IF ( med_diag%MEGRAZZ3%dgsave ) THEN 
    4381                      megrazz3(ji,jj,jk) = (fgmezmi * xthetazmi) 
    4382                   ENDIF 
    4383         IF ( med_diag%PBSI3%dgsave    ) THEN 
    4384                      pbsi3(ji,jj,jk)    = (fprds * zpds) 
    4385                   ENDIF 
    4386         IF ( med_diag%PCAL3%dgsave    ) THEN 
    4387                      pcal3(ji,jj,jk)    = ftempca 
    4388                   ENDIF 
    4389         IF ( med_diag%REMOC3%dgsave   ) THEN 
    4390                      remoc3(ji,jj,jk)   = freminc 
    4391                   ENDIF 
    4392         IF ( med_diag%PNLIMJ3%dgsave  ) THEN 
    4393                      ! pnlimj3(ji,jj,jk)  = fjln 
    4394                      pnlimj3(ji,jj,jk)  = fjlim_pn 
    4395                   ENDIF 
    4396         IF ( med_diag%PNLIMN3%dgsave  ) THEN 
    4397                      pnlimn3(ji,jj,jk)  = fnln 
    4398                   ENDIF 
    4399         IF ( med_diag%PNLIMFE3%dgsave ) THEN 
    4400                      pnlimfe3(ji,jj,jk) = ffln 
    4401                   ENDIF 
    4402         IF ( med_diag%PDLIMJ3%dgsave  ) THEN 
    4403                      ! pdlimj3(ji,jj,jk)  = fjld 
    4404                      pdlimj3(ji,jj,jk)  = fjlim_pd 
    4405                   ENDIF 
    4406         IF ( med_diag%PDLIMN3%dgsave  ) THEN 
    4407                      pdlimn3(ji,jj,jk)  = fnld 
    4408                   ENDIF 
    4409         IF ( med_diag%PDLIMFE3%dgsave ) THEN 
    4410                      pdlimfe3(ji,jj,jk) = ffld 
    4411                   ENDIF 
    4412         IF ( med_diag%PDLIMSI3%dgsave ) THEN 
    4413                      pdlimsi3(ji,jj,jk) = fsld2 
    4414                   ENDIF 
    4415                   !! 
    4416                   !! ** Without using iom_use 
    4417                ELSE IF( ln_diatrc ) THEN 
     3840                   !! 
     3841                   !! ** 3D diagnostics 
     3842                   IF( med_diag%TPP3%dgsave ) THEN 
     3843                      tpp3d(ji,jj,jk) =  (fprn * zphn) + (fprd * zphd) 
     3844                      !CALL iom_put( "TPP3"  , tpp3d ) 
     3845                   ENDIF 
     3846                   IF( med_diag%TPPD3%dgsave ) THEN 
     3847                      tppd3(ji,jj,jk) =  (fprd * zphd) 
     3848                   ENDIF 
     3849 
     3850                   IF( med_diag%REMIN3N%dgsave ) THEN 
     3851                      remin3dn(ji,jj,jk) = fregen + (freminn * fthk) !! remineralisation 
     3852                      !CALL iom_put( "REMIN3N"  , remin3dn ) 
     3853                   ENDIF 
     3854                   !! IF( med_diag%PH3%dgsave ) THEN 
     3855                   !!     CALL iom_put( "PH3"  , f3_pH ) 
     3856                   !! ENDIF 
     3857                   !! IF( med_diag%OM_CAL3%dgsave ) THEN 
     3858                   !!     CALL iom_put( "OM_CAL3"  , f3_omcal ) 
     3859                   !! ENDIF 
     3860                   !!  
     3861                   !! AXY (09/11/16): CMIP6 diagnostics 
     3862                   IF ( med_diag%DCALC3%dgsave   ) THEN 
     3863                      dcalc3(ji,jj,jk) = freminca 
     3864                   ENDIF 
     3865                   IF ( med_diag%FEDISS3%dgsave  ) THEN 
     3866                      fediss3(ji,jj,jk) = ffetop 
     3867                   ENDIF 
     3868                   IF ( med_diag%FESCAV3%dgsave  ) THEN 
     3869                      fescav3(ji,jj,jk) = ffescav 
     3870                   ENDIF 
     3871                   IF ( med_diag%MIGRAZP3%dgsave ) THEN 
     3872                      migrazp3(ji,jj,jk) = fgmipn * xthetapn 
     3873                   ENDIF 
     3874                   IF ( med_diag%MIGRAZD3%dgsave ) THEN 
     3875                      migrazd3(ji,jj,jk) = fgmidc 
     3876                   ENDIF 
     3877                   IF ( med_diag%MEGRAZP3%dgsave ) THEN 
     3878                      megrazp3(ji,jj,jk) = (fgmepn * xthetapn) + (fgmepd * xthetapd) 
     3879                   ENDIF 
     3880                   IF ( med_diag%MEGRAZD3%dgsave ) THEN 
     3881                      megrazd3(ji,jj,jk) = fgmedc 
     3882                   ENDIF 
     3883                   IF ( med_diag%MEGRAZZ3%dgsave ) THEN 
     3884                      megrazz3(ji,jj,jk) = (fgmezmi * xthetazmi) 
     3885                   ENDIF 
     3886                   IF ( med_diag%PBSI3%dgsave    ) THEN 
     3887                      pbsi3(ji,jj,jk)    = (fprds * zpds) 
     3888                   ENDIF 
     3889                   IF ( med_diag%PCAL3%dgsave    ) THEN 
     3890                      pcal3(ji,jj,jk)    = ftempca 
     3891                   ENDIF 
     3892                   IF ( med_diag%REMOC3%dgsave   ) THEN 
     3893                      remoc3(ji,jj,jk)   = freminc 
     3894                   ENDIF 
     3895                   IF ( med_diag%PNLIMJ3%dgsave  ) THEN 
     3896                      ! pnlimj3(ji,jj,jk)  = fjln 
     3897                      pnlimj3(ji,jj,jk)  = fjlim_pn 
     3898                   ENDIF 
     3899                   IF ( med_diag%PNLIMN3%dgsave  ) THEN 
     3900                      pnlimn3(ji,jj,jk)  = fnln 
     3901                   ENDIF 
     3902                   IF ( med_diag%PNLIMFE3%dgsave ) THEN 
     3903                      pnlimfe3(ji,jj,jk) = ffln 
     3904                   ENDIF 
     3905                   IF ( med_diag%PDLIMJ3%dgsave  ) THEN 
     3906                      ! pdlimj3(ji,jj,jk)  = fjld 
     3907                      pdlimj3(ji,jj,jk)  = fjlim_pd 
     3908                   ENDIF 
     3909                   IF ( med_diag%PDLIMN3%dgsave  ) THEN 
     3910                      pdlimn3(ji,jj,jk)  = fnld 
     3911                   ENDIF 
     3912                   IF ( med_diag%PDLIMFE3%dgsave ) THEN 
     3913                      pdlimfe3(ji,jj,jk) = ffld 
     3914                   ENDIF 
     3915                   IF ( med_diag%PDLIMSI3%dgsave ) THEN 
     3916                      pdlimsi3(ji,jj,jk) = fsld2 
     3917                   ENDIF 
     3918                ENDIF   ! end of ln_diatrc option 
     3919                !! CLOSE wet point IF..THEN loop 
     3920             endif 
     3921             !! CLOSE horizontal loops 
     3922          ENDDO 
     3923       ENDDO 
     3924       !! 
     3925       IF( lk_iomput  .AND.  .NOT.  ln_diatrc  ) THEN 
     3926          !! first - 2D diag implemented  
     3927          !!         on every K level 
     3928          !!----------------------------------------- 
     3929          !!  -- 
     3930          !!second - 2d specific k level diags 
     3931          !! 
     3932          !!----------------------------------------- 
     3933          IF (jk.eq.1) THEN 
    44183934#   if defined key_debug_medusa 
    4419                   IF (lwp) write (numout,*) 'trc_bio_medusa: diag in ij-jj-jk ln_diatrc' 
    4420                   CALL flush(numout) 
     3935             IF ( lwp ) write (numout,*) 'trc_bio_medusa: diag jk = 1' 
     3936             CALL flush(numout) 
    44213937#   endif 
    4422                   !!---------------------------------------------------------------------- 
    4423                   !! Prepare 2D diagnostics 
    4424                   !!---------------------------------------------------------------------- 
    4425                   !! 
    4426                   !! if ((kt / 240*240).eq.kt) then 
    4427                   !!    IF (lwp) write (*,*) '*******!MEDUSA DIAADD!*******',kt 
    4428                   !! endif      
    4429                   trc2d(ji,jj,1)  =  ftot_n(ji,jj)                             !! nitrogen inventory 
    4430                   trc2d(ji,jj,2)  =  ftot_si(ji,jj)                            !! silicon  inventory 
    4431                   trc2d(ji,jj,3)  =  ftot_fe(ji,jj)                            !! iron     inventory 
    4432                   trc2d(ji,jj,4)  = trc2d(ji,jj,4)  + (fprn  * zphn * fthk)    !! non-diatom production 
    4433                   trc2d(ji,jj,5)  = trc2d(ji,jj,5)  + (fdpn         * fthk)    !! non-diatom non-grazing losses 
    4434                   trc2d(ji,jj,6)  = trc2d(ji,jj,6)  + (fprd  * zphd * fthk)    !! diatom production 
    4435                   trc2d(ji,jj,7)  = trc2d(ji,jj,7)  + (fdpd         * fthk)    !! diatom non-grazing losses 
    4436                   !! diagnostic field  8 is (ostensibly) supplied by trcsed.F             
    4437                   trc2d(ji,jj,9)  = trc2d(ji,jj,9)  + (fprds * zpds * fthk)    !! diatom silicon production 
    4438                   trc2d(ji,jj,10) = trc2d(ji,jj,10) + (fsdiss  * fthk)         !! diatom silicon dissolution 
    4439                   trc2d(ji,jj,11) = trc2d(ji,jj,11) + (fgmipn  * fthk)         !! microzoo grazing on non-diatoms 
    4440                   trc2d(ji,jj,12) = trc2d(ji,jj,12) + (fgmid   * fthk)         !! microzoo grazing on detrital nitrogen 
    4441                   trc2d(ji,jj,13) = trc2d(ji,jj,13) + (fdzmi   * fthk)         !! microzoo non-grazing losses 
    4442                   trc2d(ji,jj,14) = trc2d(ji,jj,14) + (fgmepn  * fthk)         !! mesozoo  grazing on non-diatoms 
    4443                   trc2d(ji,jj,15) = trc2d(ji,jj,15) + (fgmepd  * fthk)         !! mesozoo  grazing on diatoms 
    4444                   trc2d(ji,jj,16) = trc2d(ji,jj,16) + (fgmezmi * fthk)         !! mesozoo  grazing on microzoo 
    4445                   trc2d(ji,jj,17) = trc2d(ji,jj,17) + (fgmed   * fthk)         !! mesozoo  grazing on detrital nitrogen 
    4446                   trc2d(ji,jj,18) = trc2d(ji,jj,18) + (fdzme   * fthk)         !! mesozoo  non-grazing losses 
    4447                   !! diagnostic field 19 is (ostensibly) supplied by trcexp.F 
    4448                   trc2d(ji,jj,20) = trc2d(ji,jj,20) + (fslown  * fthk)         !! slow sinking detritus N production 
    4449                   trc2d(ji,jj,21) = trc2d(ji,jj,21) + (fdd     * fthk)         !! detrital remineralisation 
    4450                   trc2d(ji,jj,22) = trc2d(ji,jj,22) + (ffetop  * fthk)         !! aeolian  iron addition 
    4451                   trc2d(ji,jj,23) = trc2d(ji,jj,23) + (ffebot  * fthk)         !! seafloor iron addition 
    4452                   trc2d(ji,jj,24) = trc2d(ji,jj,24) + (ffescav * fthk)         !! "free" iron scavenging 
    4453                   trc2d(ji,jj,25) = trc2d(ji,jj,25) + (fjlim_pn * zphn * fthk) !! non-diatom J  limitation term  
    4454                   trc2d(ji,jj,26) = trc2d(ji,jj,26) + (fnln  * zphn * fthk)    !! non-diatom N  limitation term  
    4455                   trc2d(ji,jj,27) = trc2d(ji,jj,27) + (ffln  * zphn * fthk)    !! non-diatom Fe limitation term  
    4456                   trc2d(ji,jj,28) = trc2d(ji,jj,28) + (fjlim_pd * zphd * fthk) !! diatom     J  limitation term  
    4457                   trc2d(ji,jj,29) = trc2d(ji,jj,29) + (fnld  * zphd * fthk)    !! diatom     N  limitation term  
    4458                   trc2d(ji,jj,30) = trc2d(ji,jj,30) + (ffld  * zphd * fthk)    !! diatom     Fe limitation term  
    4459                   trc2d(ji,jj,31) = trc2d(ji,jj,31) + (fsld2 * zphd * fthk)    !! diatom     Si limitation term  
    4460                   trc2d(ji,jj,32) = trc2d(ji,jj,32) + (fsld  * zphd * fthk)    !! diatom     Si uptake limitation term 
    4461                   if (jk.eq.i0100) trc2d(ji,jj,33) = fslownflux(ji,jj)         !! slow detritus flux at  100 m 
    4462                   if (jk.eq.i0200) trc2d(ji,jj,34) = fslownflux(ji,jj)         !! slow detritus flux at  200 m 
    4463                   if (jk.eq.i0500) trc2d(ji,jj,35) = fslownflux(ji,jj)         !! slow detritus flux at  500 m 
    4464                   if (jk.eq.i1000) trc2d(ji,jj,36) = fslownflux(ji,jj)         !! slow detritus flux at 1000 m 
    4465                   trc2d(ji,jj,37) = trc2d(ji,jj,37) + fregen                   !! non-fast N  full column regeneration 
    4466                   trc2d(ji,jj,38) = trc2d(ji,jj,38) + fregensi                 !! non-fast Si full column regeneration 
    4467                   if (jk.eq.i0100) trc2d(ji,jj,39) = trc2d(ji,jj,37)           !! non-fast N  regeneration to  100 m 
    4468                   if (jk.eq.i0200) trc2d(ji,jj,40) = trc2d(ji,jj,37)           !! non-fast N  regeneration to  200 m 
    4469                   if (jk.eq.i0500) trc2d(ji,jj,41) = trc2d(ji,jj,37)           !! non-fast N  regeneration to  500 m 
    4470                   if (jk.eq.i1000) trc2d(ji,jj,42) = trc2d(ji,jj,37)           !! non-fast N  regeneration to 1000 m 
    4471                   trc2d(ji,jj,43) = trc2d(ji,jj,43) + (ftempn  * fthk)         !! fast sinking detritus N production 
    4472                   trc2d(ji,jj,44) = trc2d(ji,jj,44) + (ftempsi * fthk)         !! fast sinking detritus Si production 
    4473                   trc2d(ji,jj,45) = trc2d(ji,jj,45) + (ftempfe * fthk)         !! fast sinking detritus Fe production 
    4474                   trc2d(ji,jj,46) = trc2d(ji,jj,46) + (ftempc  * fthk)         !! fast sinking detritus C production 
    4475                   trc2d(ji,jj,47) = trc2d(ji,jj,47) + (ftempca * fthk)         !! fast sinking detritus CaCO3 production 
    4476                   if (jk.eq.i0100) trc2d(ji,jj,48) = ffastn(ji,jj)             !! fast detritus N  flux at  100 m 
    4477                   if (jk.eq.i0200) trc2d(ji,jj,49) = ffastn(ji,jj)             !! fast detritus N  flux at  200 m 
    4478                   if (jk.eq.i0500) trc2d(ji,jj,50) = ffastn(ji,jj)             !! fast detritus N  flux at  500 m 
    4479                   if (jk.eq.i1000) trc2d(ji,jj,51) = ffastn(ji,jj)             !! fast detritus N  flux at 1000 m 
    4480                   if (jk.eq.i0100) trc2d(ji,jj,52) = fregenfast(ji,jj)         !! N  regeneration to  100 m 
    4481                   if (jk.eq.i0200) trc2d(ji,jj,53) = fregenfast(ji,jj)         !! N  regeneration to  200 m 
    4482                   if (jk.eq.i0500) trc2d(ji,jj,54) = fregenfast(ji,jj)         !! N  regeneration to  500 m 
    4483                   if (jk.eq.i1000) trc2d(ji,jj,55) = fregenfast(ji,jj)         !! N  regeneration to 1000 m 
    4484                   if (jk.eq.i0100) trc2d(ji,jj,56) = ffastsi(ji,jj)            !! fast detritus Si flux at  100 m 
    4485                   if (jk.eq.i0200) trc2d(ji,jj,57) = ffastsi(ji,jj)            !! fast detritus Si flux at  200 m 
    4486                   if (jk.eq.i0500) trc2d(ji,jj,58) = ffastsi(ji,jj)            !! fast detritus Si flux at  500 m 
    4487                   if (jk.eq.i1000) trc2d(ji,jj,59) = ffastsi(ji,jj)            !! fast detritus Si flux at 1000 m 
    4488                   if (jk.eq.i0100) trc2d(ji,jj,60) = fregenfastsi(ji,jj)       !! Si regeneration to  100 m 
    4489                   if (jk.eq.i0200) trc2d(ji,jj,61) = fregenfastsi(ji,jj)       !! Si regeneration to  200 m 
    4490                   if (jk.eq.i0500) trc2d(ji,jj,62) = fregenfastsi(ji,jj)       !! Si regeneration to  500 m 
    4491                   if (jk.eq.i1000) trc2d(ji,jj,63) = fregenfastsi(ji,jj)       !! Si regeneration to 1000 m 
    4492                   trc2d(ji,jj,64) = trc2d(ji,jj,64) + (freminn  * fthk)        !! sum of fast-sinking N  fluxes 
    4493                   trc2d(ji,jj,65) = trc2d(ji,jj,65) + (freminsi * fthk)        !! sum of fast-sinking Si fluxes 
    4494                   trc2d(ji,jj,66) = trc2d(ji,jj,66) + (freminfe * fthk)        !! sum of fast-sinking Fe fluxes 
    4495                   trc2d(ji,jj,67) = trc2d(ji,jj,67) + (freminc  * fthk)        !! sum of fast-sinking C  fluxes 
    4496                   trc2d(ji,jj,68) = trc2d(ji,jj,68) + (freminca * fthk)        !! sum of fast-sinking Ca fluxes 
    4497                   if (jk.eq.jmbathy) then 
    4498                      trc2d(ji,jj,69) = fsedn(ji,jj)                                   !! N  sedimentation flux                                   
    4499                      trc2d(ji,jj,70) = fsedsi(ji,jj)                                  !! Si sedimentation flux 
    4500                      trc2d(ji,jj,71) = fsedfe(ji,jj)                                  !! Fe sedimentation flux 
    4501                      trc2d(ji,jj,72) = fsedc(ji,jj)                                   !! C  sedimentation flux 
    4502                      trc2d(ji,jj,73) = fsedca(ji,jj)                                  !! Ca sedimentation flux 
    4503                   endif 
    4504                   if (jk.eq.1)  trc2d(ji,jj,74) = qsr(ji,jj) 
    4505                   if (jk.eq.1)  trc2d(ji,jj,75) = xpar(ji,jj,jk) 
    4506                   !! if (jk.eq.1)  trc2d(ji,jj,75) = real(iters) 
    4507                   !! diagnostic fields 76 to 80 calculated below 
    4508                   trc2d(ji,jj,81) = trc2d(ji,jj,81) + fprn_ml(ji,jj)           !! mixed layer non-diatom production 
    4509                   trc2d(ji,jj,82) = trc2d(ji,jj,82) + fprd_ml(ji,jj)           !! mixed layer     diatom production 
    4510 # if defined key_gulf_finland 
    4511                   if (jk.eq.1)  trc2d(ji,jj,83) = real(ibio_switch)            !! Gulf of Finland check 
    4512 # else 
    4513                   trc2d(ji,jj,83) = ocal_ccd(ji,jj)                            !! calcite CCD depth 
    4514 # endif 
    4515                   trc2d(ji,jj,84) = fccd(ji,jj)                                !! last model level above calcite CCD depth 
    4516                   if (jk.eq.1)     trc2d(ji,jj,85) = xFree(ji,jj)              !! surface "free" iron 
    4517                   if (jk.eq.i0200) trc2d(ji,jj,86) = xFree(ji,jj)              !! "free" iron at  100 m 
    4518                   if (jk.eq.i0200) trc2d(ji,jj,87) = xFree(ji,jj)              !! "free" iron at  200 m 
    4519                   if (jk.eq.i0500) trc2d(ji,jj,88) = xFree(ji,jj)              !! "free" iron at  500 m 
    4520                   if (jk.eq.i1000) trc2d(ji,jj,89) = xFree(ji,jj)              !! "free" iron at 1000 m 
    4521                   !! AXY (27/06/12): extract "euphotic depth" 
    4522                   if (jk.eq.1)     trc2d(ji,jj,90) = xze(ji,jj) 
    4523                   !!  
    4524 # if defined key_roam 
    4525                   !! ROAM provisionally has access to a further 20 2D diagnostics 
    4526                   if (jk .eq. 1) then 
    4527                      trc2d(ji,jj,91)  = trc2d(ji,jj,91)  + f_wind              !! surface wind 
    4528                      trc2d(ji,jj,92)  = trc2d(ji,jj,92)  + f_pco2atm           !! atmospheric pCO2 
    4529                      trc2d(ji,jj,93)  = trc2d(ji,jj,93)  + f_ph                !! ocean pH 
    4530                      trc2d(ji,jj,94)  = trc2d(ji,jj,94)  + f_pco2w             !! ocean pCO2 
    4531                      trc2d(ji,jj,95)  = trc2d(ji,jj,95)  + f_h2co3             !! ocean H2CO3 conc. 
    4532                      trc2d(ji,jj,96)  = trc2d(ji,jj,96)  + f_hco3              !! ocean HCO3 conc. 
    4533                      trc2d(ji,jj,97)  = trc2d(ji,jj,97)  + f_co3               !! ocean CO3 conc. 
    4534                      trc2d(ji,jj,98)  = trc2d(ji,jj,98)  + f_co2flux           !! air-sea CO2 flux 
    4535                      trc2d(ji,jj,99)  = trc2d(ji,jj,99)  + f_omcal(ji,jj)      !! ocean omega calcite  
    4536                      trc2d(ji,jj,100) = trc2d(ji,jj,100) + f_omarg(ji,jj)      !! ocean omega aragonite 
    4537                      trc2d(ji,jj,101) = trc2d(ji,jj,101) + f_TDIC              !! ocean TDIC 
    4538                      trc2d(ji,jj,102) = trc2d(ji,jj,102) + f_TALK              !! ocean TALK 
    4539                      trc2d(ji,jj,103) = trc2d(ji,jj,103) + f_kw660             !! surface kw660 
    4540                      trc2d(ji,jj,104) = trc2d(ji,jj,104) + f_pp0               !! surface pressure 
    4541                      trc2d(ji,jj,105) = trc2d(ji,jj,105) + f_o2flux            !! air-sea O2 flux 
    4542                      trc2d(ji,jj,106) = trc2d(ji,jj,106) + f_o2sat             !! ocean O2 saturation 
    4543                      trc2d(ji,jj,107) = f2_ccd_cal(ji,jj)                      !! depth calcite CCD 
    4544                      trc2d(ji,jj,108) = f2_ccd_arg(ji,jj)                      !! depth aragonite CCD 
    4545                   endif 
    4546                   if (jk .eq. jmbathy) then 
    4547                      trc2d(ji,jj,109) = f3_omcal(ji,jj,jk)                     !! seafloor omega calcite 
    4548                      trc2d(ji,jj,110) = f3_omarg(ji,jj,jk)                     !! seafloor omega aragonite 
    4549                   endif 
    4550                   !! diagnostic fields 111 to 117 calculated below 
    4551                   if (jk.eq.i0100) trc2d(ji,jj,118) = ffastca(ji,jj)/MAX(ffastc(ji,jj), rsmall)  !! rain ratio at  100 m 
    4552                   if (jk.eq.i0500) trc2d(ji,jj,119) = ffastca(ji,jj)/MAX(ffastc(ji,jj), rsmall)  !! rain ratio at  500 m 
    4553                   if (jk.eq.i1000) trc2d(ji,jj,120) = ffastca(ji,jj)/MAX(ffastc(ji,jj), rsmall)  !! rain ratio at 1000 m 
    4554                   !! AXY (18/01/12): benthic flux diagnostics 
    4555                   if (jk.eq.jmbathy) then 
    4556                      trc2d(ji,jj,121) = f_sbenin_n(ji,jj)  + f_fbenin_n(ji,jj) 
    4557                      trc2d(ji,jj,122) = f_sbenin_fe(ji,jj) + f_fbenin_fe(ji,jj) 
    4558                      trc2d(ji,jj,123) = f_sbenin_c(ji,jj)  + f_fbenin_c(ji,jj) 
    4559                      trc2d(ji,jj,124) = f_fbenin_si(ji,jj) 
    4560                      trc2d(ji,jj,125) = f_fbenin_ca(ji,jj) 
    4561                      trc2d(ji,jj,126) = f_benout_n(ji,jj) 
    4562                      trc2d(ji,jj,127) = f_benout_fe(ji,jj) 
    4563                      trc2d(ji,jj,128) = f_benout_c(ji,jj) 
    4564                      trc2d(ji,jj,129) = f_benout_si(ji,jj) 
    4565                      trc2d(ji,jj,130) = f_benout_ca(ji,jj) 
    4566                   endif 
    4567                   !! diagnostics fields 131 to 135 calculated below 
    4568                   trc2d(ji,jj,136) = f_runoff(ji,jj) 
    4569                   !! AXY (19/07/12): amended to allow for riverine nutrient addition below surface 
    4570                   trc2d(ji,jj,137) = trc2d(ji,jj,137) + (f_riv_loc_n * fthk) 
    4571                   trc2d(ji,jj,138) = trc2d(ji,jj,138) + (f_riv_loc_si * fthk) 
    4572                   trc2d(ji,jj,139) = trc2d(ji,jj,139) + (f_riv_loc_c * fthk) 
    4573                   trc2d(ji,jj,140) = trc2d(ji,jj,140) + (f_riv_loc_alk * fthk) 
    4574                   trc2d(ji,jj,141) = trc2d(ji,jj,141) + (fslowc  * fthk)       !! slow sinking detritus C production 
    4575                   if (jk.eq.i0100) trc2d(ji,jj,142) = fslowcflux(ji,jj)        !! slow detritus flux at  100 m 
    4576                   if (jk.eq.i0200) trc2d(ji,jj,143) = fslowcflux(ji,jj)        !! slow detritus flux at  200 m 
    4577                   if (jk.eq.i0500) trc2d(ji,jj,144) = fslowcflux(ji,jj)        !! slow detritus flux at  500 m 
    4578                   if (jk.eq.i1000) trc2d(ji,jj,145) = fslowcflux(ji,jj)        !! slow detritus flux at 1000 m 
    4579                   trc2d(ji,jj,146)  = trc2d(ji,jj,146)  + ftot_c(ji,jj)        !! carbon     inventory 
    4580                   trc2d(ji,jj,147)  = trc2d(ji,jj,147)  + ftot_a(ji,jj)        !! alkalinity inventory 
    4581                   trc2d(ji,jj,148)  = trc2d(ji,jj,148)  + ftot_o2(ji,jj)       !! oxygen     inventory 
    4582                   if (jk.eq.jmbathy) then 
    4583                      trc2d(ji,jj,149) = f_benout_lyso_ca(ji,jj) 
    4584                   endif 
    4585                   trc2d(ji,jj,150) = fcomm_resp(ji,jj) * fthk                  !! community respiration 
    4586         !! 
    4587         !! AXY (14/02/14): a Valentines Day gift to BASIN - a shedload of new 
    4588                   !!                 diagnostics that they'll most likely never need! 
    4589                   !!                 (actually, as with all such gifts, I'm giving them 
    4590                   !!                 some things I'd like myself!) 
    4591                   !!  
    4592                   !! ---------------------------------------------------------------------- 
    4593                   !! linear losses 
    4594                   !! non-diatom 
    4595                   trc2d(ji,jj,151) = trc2d(ji,jj,151) + (fdpn2  * fthk) 
    4596                   !! diatom 
    4597                   trc2d(ji,jj,152) = trc2d(ji,jj,152) + (fdpd2  * fthk) 
    4598                   !! microzooplankton 
    4599                   trc2d(ji,jj,153) = trc2d(ji,jj,153) + (fdzmi2 * fthk) 
    4600                   !! mesozooplankton 
    4601                   trc2d(ji,jj,154) = trc2d(ji,jj,154) + (fdzme2 * fthk) 
    4602                   !! ---------------------------------------------------------------------- 
    4603                   !! microzooplankton grazing 
    4604                   !! microzooplankton messy -> N 
    4605                   trc2d(ji,jj,155) = trc2d(ji,jj,155) + (xphi * (fgmipn + fgmid) * fthk) 
    4606                   !! microzooplankton messy -> D 
    4607                   trc2d(ji,jj,156) = trc2d(ji,jj,156) + ((1. - xbetan) * finmi * fthk) 
    4608                   !! microzooplankton messy -> DIC 
    4609                   trc2d(ji,jj,157) = trc2d(ji,jj,157) + (xphi * ((xthetapn * fgmipn) + fgmidc) * fthk) 
    4610                   !! microzooplankton messy -> Dc 
    4611                   trc2d(ji,jj,158) = trc2d(ji,jj,158) + ((1. - xbetac) * ficmi * fthk) 
    4612                   !! microzooplankton excretion 
    4613                   trc2d(ji,jj,159) = trc2d(ji,jj,159) + (fmiexcr * fthk) 
    4614                   !! microzooplankton respiration 
    4615                   trc2d(ji,jj,160) = trc2d(ji,jj,160) + (fmiresp * fthk) 
    4616                   !! microzooplankton growth 
    4617                   trc2d(ji,jj,161) = trc2d(ji,jj,161) + (fmigrow * fthk) 
    4618                   !! ---------------------------------------------------------------------- 
    4619                   !! mesozooplankton grazing 
    4620                   !! mesozooplankton messy -> N 
    4621                   trc2d(ji,jj,162) = trc2d(ji,jj,162) + (xphi * (fgmepn + fgmepd + fgmezmi + fgmed) * fthk) 
    4622                   !! mesozooplankton messy -> D 
    4623                   trc2d(ji,jj,163) = trc2d(ji,jj,163) + ((1. - xbetan) * finme * fthk) 
    4624                   !! mesozooplankton messy -> DIC 
    4625                   trc2d(ji,jj,164) = trc2d(ji,jj,164) + (xphi * ((xthetapn * fgmepn) + (xthetapd * fgmepd) + & 
    4626                   &                  (xthetazmi * fgmezmi) + fgmedc) * fthk) 
    4627                   !! mesozooplankton messy -> Dc 
    4628                   trc2d(ji,jj,165) = trc2d(ji,jj,165) + ((1. - xbetac) * ficme * fthk) 
    4629                   !! mesozooplankton excretion 
    4630                   trc2d(ji,jj,166) = trc2d(ji,jj,166) + (fmeexcr * fthk) 
    4631                   !! mesozooplankton respiration 
    4632                   trc2d(ji,jj,167) = trc2d(ji,jj,167) + (fmeresp * fthk) 
    4633                   !! mesozooplankton growth 
    4634                   trc2d(ji,jj,168) = trc2d(ji,jj,168) + (fmegrow * fthk) 
    4635                   !! ---------------------------------------------------------------------- 
    4636                   !! miscellaneous 
    4637                   trc2d(ji,jj,169) = trc2d(ji,jj,169) + (fddc    * fthk) !! detrital C remineralisation 
    4638                   trc2d(ji,jj,170) = trc2d(ji,jj,170) + (fgmidc  * fthk) !! microzoo grazing on detrital carbon 
    4639                   trc2d(ji,jj,171) = trc2d(ji,jj,171) + (fgmedc  * fthk) !! mesozoo  grazing on detrital carbon 
    4640                   !! 
    4641                   !! ---------------------------------------------------------------------- 
    4642         !! 
    4643         !! AXY (23/10/14): extract primary production related surface fields to 
    4644         !!                 deal with diel cycle issues; hijacking BASIN 150m 
    4645         !!                 diagnostics to do so (see commented out diagnostics 
    4646         !!                 below this section) 
    4647         !! 
    4648         !! extract fields at surface 
    4649        !! if (jk .eq. 1) then 
    4650                  !!    trc2d(ji,jj,172) = zchn              !! Pn chlorophyll 
    4651                  !!    trc2d(ji,jj,173) = zphn              !! Pn biomass 
    4652                  !!    trc2d(ji,jj,174) = fjln              !! Pn J-term 
    4653                  !!    trc2d(ji,jj,175) = (fprn * zphn)     !! Pn PP 
    4654                  !!    trc2d(ji,jj,176) = zchd              !! Pd chlorophyll 
    4655                  !!    trc2d(ji,jj,177) = zphd              !! Pd biomass 
    4656                  !!    trc2d(ji,jj,178) = fjld              !! Pd J-term 
    4657                  !!    trc2d(ji,jj,179) = xpar(ji,jj,jk)    !! Pd PP 
    4658                  !!    trc2d(ji,jj,180) = loc_T             !! local temperature 
    4659                  !! endif 
    4660        !! !! 
    4661        !! !! extract fields at 50m (actually 44-50m) 
    4662        !! if (jk .eq. 18) then 
    4663                  !!    trc2d(ji,jj,181) = zchn              !! Pn chlorophyll 
    4664                  !!    trc2d(ji,jj,182) = zphn              !! Pn biomass 
    4665                  !!    trc2d(ji,jj,183) = fjln              !! Pn J-term 
    4666                  !!    trc2d(ji,jj,184) = (fprn * zphn)     !! Pn PP 
    4667                  !!    trc2d(ji,jj,185) = zchd              !! Pd chlorophyll 
    4668                  !!    trc2d(ji,jj,186) = zphd              !! Pd biomass 
    4669                  !!    trc2d(ji,jj,187) = fjld              !! Pd J-term 
    4670                  !!    trc2d(ji,jj,188) = xpar(ji,jj,jk)    !! Pd PP 
    4671                  !!    trc2d(ji,jj,189) = loc_T             !! local temperature 
    4672                  !! endif 
    4673        !! !! 
    4674        !! !! extract fields at 100m 
    4675        !! if (jk .eq. i0100) then 
    4676                  !!    trc2d(ji,jj,190) = zchn              !! Pn chlorophyll 
    4677                  !!    trc2d(ji,jj,191) = zphn              !! Pn biomass 
    4678                  !!    trc2d(ji,jj,192) = fjln              !! Pn J-term 
    4679                  !!    trc2d(ji,jj,193) = (fprn * zphn)     !! Pn PP 
    4680                  !!    trc2d(ji,jj,194) = zchd              !! Pd chlorophyll 
    4681                  !!    trc2d(ji,jj,195) = zphd              !! Pd biomass 
    4682                  !!    trc2d(ji,jj,196) = fjld              !! Pd J-term 
    4683                  !!    trc2d(ji,jj,197) = xpar(ji,jj,jk)    !! Pd PP 
    4684                  !!    trc2d(ji,jj,198) = loc_T             !! local temperature 
    4685                  !! endif 
    4686                  !! 
    4687                   !! extract relevant BASIN fields at 150m 
    4688                   if (jk .eq. i0150) then 
    4689                      trc2d(ji,jj,172) = trc2d(ji,jj,4)    !! Pn PP 
    4690                      trc2d(ji,jj,173) = trc2d(ji,jj,151)  !! Pn linear loss 
    4691                      trc2d(ji,jj,174) = trc2d(ji,jj,5)    !! Pn non-linear loss 
    4692                      trc2d(ji,jj,175) = trc2d(ji,jj,11)   !! Pn grazing to Zmi 
    4693                      trc2d(ji,jj,176) = trc2d(ji,jj,14)   !! Pn grazing to Zme 
    4694                      trc2d(ji,jj,177) = trc2d(ji,jj,6)    !! Pd PP 
    4695                      trc2d(ji,jj,178) = trc2d(ji,jj,152)  !! Pd linear loss 
    4696                      trc2d(ji,jj,179) = trc2d(ji,jj,7)    !! Pd non-linear loss 
    4697                      trc2d(ji,jj,180) = trc2d(ji,jj,15)   !! Pd grazing to Zme 
    4698                      trc2d(ji,jj,181) = trc2d(ji,jj,12)   !! Zmi grazing on D 
    4699                      trc2d(ji,jj,182) = trc2d(ji,jj,170)  !! Zmi grazing on Dc 
    4700                      trc2d(ji,jj,183) = trc2d(ji,jj,155)  !! Zmi messy feeding loss to N 
    4701                      trc2d(ji,jj,184) = trc2d(ji,jj,156)  !! Zmi messy feeding loss to D 
    4702                      trc2d(ji,jj,185) = trc2d(ji,jj,157)  !! Zmi messy feeding loss to DIC 
    4703                      trc2d(ji,jj,186) = trc2d(ji,jj,158)  !! Zmi messy feeding loss to Dc 
    4704                      trc2d(ji,jj,187) = trc2d(ji,jj,159)  !! Zmi excretion 
    4705                      trc2d(ji,jj,188) = trc2d(ji,jj,160)  !! Zmi respiration 
    4706                      trc2d(ji,jj,189) = trc2d(ji,jj,161)  !! Zmi growth 
    4707                      trc2d(ji,jj,190) = trc2d(ji,jj,153)  !! Zmi linear loss 
    4708                      trc2d(ji,jj,191) = trc2d(ji,jj,13)   !! Zmi non-linear loss 
    4709                      trc2d(ji,jj,192) = trc2d(ji,jj,16)   !! Zmi grazing to Zme 
    4710                      trc2d(ji,jj,193) = trc2d(ji,jj,17)   !! Zme grazing on D 
    4711                      trc2d(ji,jj,194) = trc2d(ji,jj,171)  !! Zme grazing on Dc 
    4712                      trc2d(ji,jj,195) = trc2d(ji,jj,162)  !! Zme messy feeding loss to N 
    4713                      trc2d(ji,jj,196) = trc2d(ji,jj,163)  !! Zme messy feeding loss to D 
    4714                      trc2d(ji,jj,197) = trc2d(ji,jj,164)  !! Zme messy feeding loss to DIC 
    4715                      trc2d(ji,jj,198) = trc2d(ji,jj,165)  !! Zme messy feeding loss to Dc 
    4716                      trc2d(ji,jj,199) = trc2d(ji,jj,166)  !! Zme excretion 
    4717                      trc2d(ji,jj,200) = trc2d(ji,jj,167)  !! Zme respiration 
    4718                      trc2d(ji,jj,201) = trc2d(ji,jj,168)  !! Zme growth 
    4719                      trc2d(ji,jj,202) = trc2d(ji,jj,154)  !! Zme linear loss 
    4720                      trc2d(ji,jj,203) = trc2d(ji,jj,18)   !! Zme non-linear loss 
    4721                      trc2d(ji,jj,204) = trc2d(ji,jj,20)   !! Slow detritus production, N 
    4722                      trc2d(ji,jj,205) = trc2d(ji,jj,21)   !! Slow detritus remineralisation, N 
    4723                      trc2d(ji,jj,206) = trc2d(ji,jj,141)  !! Slow detritus production, C 
    4724                      trc2d(ji,jj,207) = trc2d(ji,jj,169)  !! Slow detritus remineralisation, C 
    4725                      trc2d(ji,jj,208) = trc2d(ji,jj,43)   !! Fast detritus production, N 
    4726                      trc2d(ji,jj,209) = trc2d(ji,jj,21)   !! Fast detritus remineralisation, N 
    4727                      trc2d(ji,jj,210) = trc2d(ji,jj,64)   !! Fast detritus production, C 
    4728                      trc2d(ji,jj,211) = trc2d(ji,jj,67)   !! Fast detritus remineralisation, C 
    4729                      trc2d(ji,jj,212) = trc2d(ji,jj,150)  !! Community respiration 
    4730                      trc2d(ji,jj,213) = fslownflux(ji,jj) !! Slow detritus N flux at 150 m 
    4731                      trc2d(ji,jj,214) = fslowcflux(ji,jj) !! Slow detritus C flux at 150 m 
    4732                      trc2d(ji,jj,215) = ffastn(ji,jj)     !! Fast detritus N flux at 150 m 
    4733                      trc2d(ji,jj,216) = ffastc(ji,jj)     !! Fast detritus C flux at 150 m 
    4734                   endif 
    4735                   !!  
    4736                   !! Jpalm (11-08-2014) 
    4737                   !! Add UKESM1 diagnoatics  
    4738                   !!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    4739                   if ((jk .eq. 1) .and.( jdms.eq.1)) then 
    4740                      trc2d(ji,jj,221) = dms_surf          !! DMS surface concentration  
    4741                      !! AXY (13/03/15): add in other DMS estimates 
    4742                      trc2d(ji,jj,222) = dms_andr          !! DMS surface concentration  
    4743                      trc2d(ji,jj,223) = dms_simo          !! DMS surface concentration  
    4744                      trc2d(ji,jj,224) = dms_aran          !! DMS surface concentration  
    4745                      trc2d(ji,jj,225) = dms_hall          !! DMS surface concentration  
    4746                   endif 
    4747 # endif 
    4748                   !! other possible future diagnostics include: 
    4749                   !!   - integrated tracer values (esp. biological) 
    4750                   !!   - mixed layer tracer values 
    4751                   !!   - sub-surface chlorophyll maxima (plus depth) 
    4752                   !!   - different mixed layer depth criteria (T, sigma, var. sigma) 
    4753  
    4754                   !!---------------------------------------------------------------------- 
    4755                   !! Prepare 3D diagnostics 
    4756                   !!---------------------------------------------------------------------- 
    4757                   !! 
    4758                   trc3d(ji,jj,jk,1)  = ((fprn + fprd) * zphn)     !! primary production   
    4759                   trc3d(ji,jj,jk,2)  = fslownflux(ji,jj) + ffastn(ji,jj) !! detrital flux 
    4760                   trc3d(ji,jj,jk,3)  = fregen + (freminn * fthk)  !! remineralisation 
    4761 # if defined key_roam 
    4762                   trc3d(ji,jj,jk,4)  = f3_pH(ji,jj,jk)            !! pH 
    4763                   trc3d(ji,jj,jk,5)  = f3_omcal(ji,jj,jk)         !! omega calcite 
    4764 # else 
    4765                   trc3d(ji,jj,jk,4)  = ffastsi(ji,jj)             !! fast Si flux 
    4766 # endif 
    4767              ENDIF   ! end of ln_diatrc option 
    4768              !! CLOSE wet point IF..THEN loop 
    4769             endif 
    4770          !! CLOSE horizontal loops 
    4771          ENDDO 
    4772          ENDDO 
    4773          !! 
    4774              IF( lk_iomput  .AND.  .NOT.  ln_diatrc  ) THEN 
    4775                  !! first - 2D diag implemented  
    4776                  !!         on every K level 
    4777                  !!----------------------------------------- 
    4778                  !!  -- 
    4779                  !!second - 2d specific k level diags 
    4780                  !! 
    4781                  !!----------------------------------------- 
    4782                  IF (jk.eq.1) THEN 
     3938             IF( med_diag%MED_QSR%dgsave ) THEN 
     3939                CALL iom_put( "MED_QSR"  , qsr ) ! 
     3940             ENDIF 
     3941             IF( med_diag%MED_XPAR%dgsave ) THEN 
     3942                CALL iom_put( "MED_XPAR"  , xpar(:,:,jk) ) ! 
     3943             ENDIF 
     3944             IF( med_diag%OCAL_CCD%dgsave ) THEN 
     3945                CALL iom_put( "OCAL_CCD"  , ocal_ccd ) ! 
     3946             ENDIF 
     3947             IF( med_diag%FE_0000%dgsave ) THEN 
     3948                CALL iom_put( "FE_0000"  , xFree ) ! 
     3949             ENDIF 
     3950             IF( med_diag%MED_XZE%dgsave ) THEN 
     3951                CALL iom_put( "MED_XZE"  , xze ) ! 
     3952             ENDIF 
     3953# if defined key_roam                      
     3954             IF( med_diag%WIND%dgsave ) THEN 
     3955                CALL iom_put( "WIND"  , wndm ) 
     3956             ENDIF 
     3957             IF( med_diag%ATM_PCO2%dgsave ) THEN 
     3958                CALL iom_put( "ATM_PCO2"  , f_pco2a2d ) 
     3959                CALL wrk_dealloc( jpi, jpj,    f_pco2a2d  ) 
     3960             ENDIF 
     3961             IF( med_diag%OCN_PH%dgsave ) THEN 
     3962                zw2d(:,:) = f3_pH(:,:,jk) 
     3963                CALL iom_put( "OCN_PH"  , zw2d ) 
     3964             ENDIF 
     3965             IF( med_diag%OCN_PCO2%dgsave ) THEN 
     3966                CALL iom_put( "OCN_PCO2"  , f_pco2w2d ) 
     3967                CALL wrk_dealloc( jpi, jpj,   f_pco2w2d   ) 
     3968             ENDIF 
     3969             IF( med_diag%OCNH2CO3%dgsave ) THEN 
     3970                zw2d(:,:) = f3_h2co3(:,:,jk) 
     3971                CALL iom_put( "OCNH2CO3"  , zw2d ) 
     3972             ENDIF 
     3973             IF( med_diag%OCN_HCO3%dgsave ) THEN 
     3974                zw2d(:,:) = f3_hco3(:,:,jk) 
     3975                CALL iom_put( "OCN_HCO3"  , zw2d ) 
     3976             ENDIF 
     3977             IF( med_diag%OCN_CO3%dgsave ) THEN 
     3978                zw2d(:,:) = f3_co3(:,:,jk) 
     3979                CALL iom_put( "OCN_CO3"  , zw2d ) 
     3980             ENDIF 
     3981             IF( med_diag%CO2FLUX%dgsave ) THEN 
     3982                CALL iom_put( "CO2FLUX"  , f_co2flux2d ) 
     3983                CALL wrk_dealloc( jpi, jpj,   f_co2flux2d   ) 
     3984             ENDIF 
     3985             !!  
     3986             !! AXY (10/11/16): repeat CO2 flux diagnostic in UKMO/CMIP6 units; this 
     3987             !!                 both outputs the CO2 flux in specified units and 
     3988             !!                 sends the resulting field to the coupler 
     3989             !! JPALM (17/11/16): put CO2 flux (fgco2) alloc/unalloc/pass to zn  
     3990             !!                 out of diag list request  
     3991             CALL lbc_lnk( fgco2(:,:),'T',1. ) 
     3992             IF( med_diag%FGCO2%dgsave ) THEN 
     3993                CALL iom_put( "FGCO2"  , fgco2 ) 
     3994             ENDIF 
     3995             !! JPALM (17/11/16): should mv this fgco2 part  
     3996             !!                   out of lk_iomput loop 
     3997             zb_co2_flx = zn_co2_flx 
     3998             zn_co2_flx = fgco2 
     3999             IF ( lk_oasis ) THEN 
     4000                CO2Flux_out_cpl = zn_co2_flx 
     4001             ENDIF 
     4002             CALL wrk_dealloc( jpi, jpj,   fgco2   ) 
     4003             !! --- 
     4004             IF( med_diag%OM_CAL%dgsave ) THEN 
     4005                CALL iom_put( "OM_CAL"  , f_omcal ) 
     4006             ENDIF 
     4007             IF( med_diag%OM_ARG%dgsave ) THEN 
     4008                CALL iom_put( "OM_ARG"  , f_omarg ) 
     4009             ENDIF 
     4010             IF( med_diag%TCO2%dgsave ) THEN 
     4011                CALL iom_put( "TCO2"  , f_TDIC2d ) 
     4012                CALL wrk_dealloc( jpi, jpj,   f_TDIC2d   ) 
     4013             ENDIF 
     4014             IF( med_diag%TALK%dgsave ) THEN 
     4015                CALL iom_put( "TALK"  , f_TALK2d ) 
     4016                CALL wrk_dealloc( jpi, jpj,    f_TALK2d  ) 
     4017             ENDIF 
     4018             IF( med_diag%KW660%dgsave ) THEN 
     4019                CALL iom_put( "KW660"  , f_kw6602d ) 
     4020                CALL wrk_dealloc( jpi, jpj,   f_kw6602d   ) 
     4021             ENDIF 
     4022             IF( med_diag%ATM_PP0%dgsave ) THEN 
     4023                CALL iom_put( "ATM_PP0"  , f_pp02d ) 
     4024                CALL wrk_dealloc( jpi, jpj,    f_pp02d  ) 
     4025             ENDIF 
     4026             IF( med_diag%O2FLUX%dgsave ) THEN 
     4027                CALL iom_put( "O2FLUX"  , f_o2flux2d ) 
     4028                CALL wrk_dealloc( jpi, jpj,   f_o2flux2d   ) 
     4029             ENDIF 
     4030             IF( med_diag%O2SAT%dgsave ) THEN 
     4031                CALL iom_put( "O2SAT"  , f_o2sat2d ) 
     4032                CALL wrk_dealloc( jpi, jpj,  f_o2sat2d    ) 
     4033             ENDIF 
     4034             IF( med_diag%CAL_CCD%dgsave ) THEN 
     4035                CALL iom_put( "CAL_CCD"  , f2_ccd_cal ) 
     4036             ENDIF 
     4037             IF( med_diag%ARG_CCD%dgsave ) THEN 
     4038                CALL iom_put( "ARG_CCD"  , f2_ccd_arg ) 
     4039             ENDIF 
     4040             IF (jdms .eq. 1) THEN 
     4041                IF( med_diag%DMS_SURF%dgsave ) THEN 
     4042                   CALL lbc_lnk(dms_surf2d(:,:),'T',1. ) 
     4043                   CALL iom_put( "DMS_SURF"  , dms_surf2d ) 
     4044                   zb_dms_srf = zn_dms_srf 
     4045                   zn_dms_srf = dms_surf2d 
     4046                   IF ( lk_oasis ) THEN 
     4047                      DMS_out_cpl = zn_dms_srf 
     4048                   ENDIF 
     4049                   CALL wrk_dealloc( jpi, jpj,   dms_surf2d   )  
     4050                ENDIF 
     4051                IF( med_diag%DMS_ANDR%dgsave ) THEN 
     4052                   CALL iom_put( "DMS_ANDR"  , dms_andr2d ) 
     4053                   CALL wrk_dealloc( jpi, jpj,   dms_andr2d   ) 
     4054                ENDIF 
     4055                IF( med_diag%DMS_SIMO%dgsave ) THEN 
     4056                   CALL iom_put( "DMS_SIMO"  , dms_simo2d ) 
     4057                   CALL wrk_dealloc( jpi, jpj,    dms_simo2d  ) 
     4058                ENDIF 
     4059                IF( med_diag%DMS_ARAN%dgsave ) THEN 
     4060                   CALL iom_put( "DMS_ARAN"  , dms_aran2d ) 
     4061                   CALL wrk_dealloc( jpi, jpj,   dms_aran2d   ) 
     4062                ENDIF 
     4063                IF( med_diag%DMS_HALL%dgsave ) THEN 
     4064                   CALL iom_put( "DMS_HALL"  , dms_hall2d ) 
     4065                   CALL wrk_dealloc( jpi, jpj,   dms_hall2d   ) 
     4066                ENDIF 
     4067             ENDIF 
     4068             !! AXY (24/11/16): extra MOCSY diagnostics 
     4069             IF( med_diag%ATM_XCO2%dgsave ) THEN 
     4070                CALL iom_put( "ATM_XCO2"  ,   f_xco2a_2d      ) 
     4071                CALL wrk_dealloc( jpi, jpj,   f_xco2a_2d      ) 
     4072             ENDIF 
     4073             IF( med_diag%OCN_FCO2%dgsave ) THEN 
     4074                CALL iom_put( "OCN_FCO2"  ,   f_fco2w_2d      ) 
     4075                CALL wrk_dealloc( jpi, jpj,   f_fco2w_2d      ) 
     4076             ENDIF 
     4077             IF( med_diag%ATM_FCO2%dgsave ) THEN 
     4078                CALL iom_put( "ATM_FCO2"  ,   f_fco2a_2d      ) 
     4079                CALL wrk_dealloc( jpi, jpj,   f_fco2a_2d      ) 
     4080             ENDIF 
     4081             IF( med_diag%OCN_RHOSW%dgsave ) THEN 
     4082                CALL iom_put( "OCN_RHOSW"  ,  f_ocnrhosw_2d   ) 
     4083                CALL wrk_dealloc( jpi, jpj,   f_ocnrhosw_2d   ) 
     4084             ENDIF 
     4085             IF( med_diag%OCN_SCHCO2%dgsave ) THEN 
     4086                CALL iom_put( "OCN_SCHCO2"  , f_ocnschco2_2d  ) 
     4087                CALL wrk_dealloc( jpi, jpj,   f_ocnschco2_2d  ) 
     4088             ENDIF 
     4089             IF( med_diag%OCN_KWCO2%dgsave ) THEN 
     4090                CALL iom_put( "OCN_KWCO2"  ,  f_ocnkwco2_2d   ) 
     4091                CALL wrk_dealloc( jpi, jpj,   f_ocnkwco2_2d   ) 
     4092             ENDIF 
     4093             IF( med_diag%OCN_K0%dgsave ) THEN 
     4094                CALL iom_put( "OCN_K0"  ,     f_ocnk0_2d      ) 
     4095                CALL wrk_dealloc( jpi, jpj,   f_ocnk0_2d      ) 
     4096             ENDIF 
     4097             IF( med_diag%CO2STARAIR%dgsave ) THEN 
     4098                CALL iom_put( "CO2STARAIR"  , f_co2starair_2d ) 
     4099                CALL wrk_dealloc( jpi, jpj,   f_co2starair_2d ) 
     4100             ENDIF 
     4101             IF( med_diag%OCN_DPCO2%dgsave ) THEN 
     4102                CALL iom_put( "OCN_DPCO2"  ,  f_ocndpco2_2d   ) 
     4103                CALL wrk_dealloc( jpi, jpj,   f_ocndpco2_2d   ) 
     4104             ENDIF 
     4105# endif                      
     4106          ELSE IF (jk.eq.i0100) THEN  
    47834107#   if defined key_debug_medusa 
    4784                      IF (lwp) write (numout,*) 'trc_bio_medusa: diag jk = 1' 
    4785                      CALL flush(numout) 
     4108             IF ( lwp ) write (numout,*) 'trc_bio_medusa: diag jk = 100' 
     4109             CALL flush(numout) 
    47864110#   endif 
    4787                      IF( med_diag%MED_QSR%dgsave ) THEN 
    4788                          CALL iom_put( "MED_QSR"  , qsr ) ! 
    4789                      ENDIF 
    4790                      IF( med_diag%MED_XPAR%dgsave ) THEN 
    4791                          CALL iom_put( "MED_XPAR"  , xpar(:,:,jk) ) ! 
    4792                      ENDIF        
    4793                      IF( med_diag%OCAL_CCD%dgsave ) THEN 
    4794                          CALL iom_put( "OCAL_CCD"  , ocal_ccd ) ! 
    4795                      ENDIF 
    4796                      IF( med_diag%FE_0000%dgsave ) THEN 
    4797                          CALL iom_put( "FE_0000"  , xFree ) ! 
    4798                      ENDIF                      
    4799                      IF( med_diag%MED_XZE%dgsave ) THEN 
    4800                          CALL iom_put( "MED_XZE"  , xze ) ! 
    4801                      ENDIF  
     4111             IF( med_diag%SDT__100%dgsave ) THEN 
     4112                zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk) 
     4113                CALL iom_put( "SDT__100"  , zw2d ) 
     4114             ENDIF 
     4115             IF( med_diag%REG__100%dgsave ) THEN 
     4116                CALL iom_put( "REG__100"  , fregen2d ) 
     4117             ENDIF 
     4118             IF( med_diag%FDT__100%dgsave ) THEN 
     4119                CALL iom_put( "FDT__100"  , ffastn ) 
     4120             ENDIF 
     4121             IF( med_diag%RG__100F%dgsave ) THEN 
     4122                CALL iom_put( "RG__100F"  , fregenfast ) 
     4123             ENDIF 
     4124             IF( med_diag%FDS__100%dgsave ) THEN 
     4125                CALL iom_put( "FDS__100"  , ffastsi ) 
     4126             ENDIF 
     4127             IF( med_diag%RGS_100F%dgsave ) THEN 
     4128                CALL iom_put( "RGS_100F"  , fregenfastsi ) 
     4129             ENDIF 
     4130             IF( med_diag%FE_0100%dgsave ) THEN 
     4131                CALL iom_put( "FE_0100"  , xFree ) 
     4132             ENDIF 
    48024133# if defined key_roam                      
    4803                      IF( med_diag%WIND%dgsave ) THEN 
    4804                          CALL iom_put( "WIND"  , wndm ) 
    4805                      ENDIF 
    4806                      IF( med_diag%ATM_PCO2%dgsave ) THEN 
    4807                          CALL iom_put( "ATM_PCO2"  , f_pco2a2d ) 
    4808                          CALL wrk_dealloc( jpi, jpj,    f_pco2a2d  ) 
    4809                      ENDIF 
    4810                      IF( med_diag%OCN_PH%dgsave ) THEN 
    4811                          zw2d(:,:) = f3_pH(:,:,jk) 
    4812                          CALL iom_put( "OCN_PH"  , zw2d ) 
    4813                      ENDIF 
    4814                      IF( med_diag%OCN_PCO2%dgsave ) THEN 
    4815                         CALL iom_put( "OCN_PCO2"  , f_pco2w2d ) 
    4816                         CALL wrk_dealloc( jpi, jpj,   f_pco2w2d   ) 
    4817                      ENDIF 
    4818                      IF( med_diag%OCNH2CO3%dgsave ) THEN 
    4819                          zw2d(:,:) = f3_h2co3(:,:,jk) 
    4820                          CALL iom_put( "OCNH2CO3"  , zw2d ) 
    4821                      ENDIF 
    4822                      IF( med_diag%OCN_HCO3%dgsave ) THEN 
    4823                          zw2d(:,:) = f3_hco3(:,:,jk) 
    4824                          CALL iom_put( "OCN_HCO3"  , zw2d ) 
    4825                      ENDIF 
    4826                      IF( med_diag%OCN_CO3%dgsave ) THEN 
    4827                          zw2d(:,:) = f3_co3(:,:,jk) 
    4828                          CALL iom_put( "OCN_CO3"  , zw2d ) 
    4829                      ENDIF 
    4830                      IF( med_diag%CO2FLUX%dgsave ) THEN 
    4831                         CALL iom_put( "CO2FLUX"  , f_co2flux2d ) 
    4832                         CALL wrk_dealloc( jpi, jpj,   f_co2flux2d   ) 
    4833                      ENDIF 
    4834                      !!  
    4835                      !! AXY (10/11/16): repeat CO2 flux diagnostic in UKMO/CMIP6 units; this 
    4836                      !!                 both outputs the CO2 flux in specified units and 
    4837                      !!                 sends the resulting field to the coupler 
    4838                      !! JPALM (17/11/16): put CO2 flux (fgco2) alloc/unalloc/pass to zn  
    4839                      !!                 out of diag list request  
    4840                      CALL lbc_lnk( fgco2(:,:),'T',1. ) 
    4841                      IF( med_diag%FGCO2%dgsave ) THEN 
    4842                          CALL iom_put( "FGCO2"  , fgco2 ) 
    4843                      ENDIF 
    4844                      !! JPALM (17/11/16): should mv this fgco2 part  
    4845                      !!                   out of lk_iomput loop 
    4846                      zb_co2_flx = zn_co2_flx 
    4847                      zn_co2_flx = fgco2 
    4848                      IF (lk_oasis) THEN 
    4849                         CO2Flux_out_cpl = zn_co2_flx 
    4850                      ENDIF 
    4851                      CALL wrk_dealloc( jpi, jpj,   fgco2   ) 
    4852                      !! --- 
    4853                      IF( med_diag%OM_CAL%dgsave ) THEN 
    4854                          CALL iom_put( "OM_CAL"  , f_omcal ) 
    4855                      ENDIF 
    4856                      IF( med_diag%OM_ARG%dgsave ) THEN 
    4857                          CALL iom_put( "OM_ARG"  , f_omarg ) 
    4858                      ENDIF 
    4859                      IF( med_diag%TCO2%dgsave ) THEN 
    4860                          CALL iom_put( "TCO2"  , f_TDIC2d ) 
    4861                          CALL wrk_dealloc( jpi, jpj,   f_TDIC2d   ) 
    4862                      ENDIF 
    4863                      IF( med_diag%TALK%dgsave ) THEN 
    4864                          CALL iom_put( "TALK"  , f_TALK2d ) 
    4865                          CALL wrk_dealloc( jpi, jpj,    f_TALK2d  ) 
    4866                      ENDIF 
    4867                      IF( med_diag%KW660%dgsave ) THEN 
    4868                          CALL iom_put( "KW660"  , f_kw6602d ) 
    4869                          CALL wrk_dealloc( jpi, jpj,   f_kw6602d   ) 
    4870                      ENDIF 
    4871                      IF( med_diag%ATM_PP0%dgsave ) THEN 
    4872                          CALL iom_put( "ATM_PP0"  , f_pp02d ) 
    4873                          CALL wrk_dealloc( jpi, jpj,    f_pp02d  ) 
    4874                      ENDIF 
    4875                      IF( med_diag%O2FLUX%dgsave ) THEN 
    4876                          CALL iom_put( "O2FLUX"  , f_o2flux2d ) 
    4877                          CALL wrk_dealloc( jpi, jpj,   f_o2flux2d   ) 
    4878                      ENDIF 
    4879                      IF( med_diag%O2SAT%dgsave ) THEN 
    4880                          CALL iom_put( "O2SAT"  , f_o2sat2d ) 
    4881                          CALL wrk_dealloc( jpi, jpj,  f_o2sat2d    ) 
    4882                      ENDIF 
    4883                      IF( med_diag%CAL_CCD%dgsave ) THEN 
    4884                          CALL iom_put( "CAL_CCD"  , f2_ccd_cal ) 
    4885                      ENDIF 
    4886                      IF( med_diag%ARG_CCD%dgsave ) THEN 
    4887                          CALL iom_put( "ARG_CCD"  , f2_ccd_arg ) 
    4888                      ENDIF 
    4889                      IF (jdms .eq. 1) THEN 
    4890                        IF( med_diag%DMS_SURF%dgsave ) THEN 
    4891                          CALL lbc_lnk(dms_surf2d(:,:),'T',1. ) 
    4892                          CALL iom_put( "DMS_SURF"  , dms_surf2d ) 
    4893                          zb_dms_srf = zn_dms_srf 
    4894                          zn_dms_srf = dms_surf2d 
    4895                          IF (lk_oasis) THEN 
    4896                             DMS_out_cpl = zn_dms_srf 
    4897                          ENDIF 
    4898                          CALL wrk_dealloc( jpi, jpj,   dms_surf2d   )  
    4899                        ENDIF 
    4900                        IF( med_diag%DMS_ANDR%dgsave ) THEN 
    4901                          CALL iom_put( "DMS_ANDR"  , dms_andr2d ) 
    4902                          CALL wrk_dealloc( jpi, jpj,   dms_andr2d   ) 
    4903                        ENDIF 
    4904                        IF( med_diag%DMS_SIMO%dgsave ) THEN 
    4905                          CALL iom_put( "DMS_SIMO"  , dms_simo2d ) 
    4906                          CALL wrk_dealloc( jpi, jpj,    dms_simo2d  ) 
    4907                        ENDIF 
    4908                        IF( med_diag%DMS_ARAN%dgsave ) THEN 
    4909                          CALL iom_put( "DMS_ARAN"  , dms_aran2d ) 
    4910                          CALL wrk_dealloc( jpi, jpj,   dms_aran2d   ) 
    4911                        ENDIF 
    4912                        IF( med_diag%DMS_HALL%dgsave ) THEN 
    4913                          CALL iom_put( "DMS_HALL"  , dms_hall2d ) 
    4914                          CALL wrk_dealloc( jpi, jpj,   dms_hall2d   ) 
    4915                        ENDIF 
    4916                      ENDIF 
    4917                      !! AXY (24/11/16): extra MOCSY diagnostics 
    4918                      IF( med_diag%ATM_XCO2%dgsave ) THEN 
    4919                         CALL iom_put( "ATM_XCO2"  ,   f_xco2a_2d      ) 
    4920                         CALL wrk_dealloc( jpi, jpj,   f_xco2a_2d      ) 
    4921                      ENDIF 
    4922                      IF( med_diag%OCN_FCO2%dgsave ) THEN 
    4923                         CALL iom_put( "OCN_FCO2"  ,   f_fco2w_2d      ) 
    4924                         CALL wrk_dealloc( jpi, jpj,   f_fco2w_2d      ) 
    4925                      ENDIF 
    4926                      IF( med_diag%ATM_FCO2%dgsave ) THEN 
    4927                         CALL iom_put( "ATM_FCO2"  ,   f_fco2a_2d      ) 
    4928                         CALL wrk_dealloc( jpi, jpj,   f_fco2a_2d      ) 
    4929                      ENDIF 
    4930                      IF( med_diag%OCN_RHOSW%dgsave ) THEN 
    4931                         CALL iom_put( "OCN_RHOSW"  ,  f_ocnrhosw_2d   ) 
    4932                         CALL wrk_dealloc( jpi, jpj,   f_ocnrhosw_2d   ) 
    4933                      ENDIF 
    4934                      IF( med_diag%OCN_SCHCO2%dgsave ) THEN 
    4935                         CALL iom_put( "OCN_SCHCO2"  , f_ocnschco2_2d  ) 
    4936                         CALL wrk_dealloc( jpi, jpj,   f_ocnschco2_2d  ) 
    4937                      ENDIF 
    4938                      IF( med_diag%OCN_KWCO2%dgsave ) THEN 
    4939                         CALL iom_put( "OCN_KWCO2"  ,  f_ocnkwco2_2d   ) 
    4940                         CALL wrk_dealloc( jpi, jpj,   f_ocnkwco2_2d   ) 
    4941                      ENDIF 
    4942                      IF( med_diag%OCN_K0%dgsave ) THEN 
    4943                         CALL iom_put( "OCN_K0"  ,     f_ocnk0_2d      ) 
    4944                         CALL wrk_dealloc( jpi, jpj,   f_ocnk0_2d      ) 
    4945                      ENDIF 
    4946                      IF( med_diag%CO2STARAIR%dgsave ) THEN 
    4947                         CALL iom_put( "CO2STARAIR"  , f_co2starair_2d ) 
    4948                         CALL wrk_dealloc( jpi, jpj,   f_co2starair_2d ) 
    4949                      ENDIF 
    4950                      IF( med_diag%OCN_DPCO2%dgsave ) THEN 
    4951                         CALL iom_put( "OCN_DPCO2"  ,  f_ocndpco2_2d   ) 
    4952                         CALL wrk_dealloc( jpi, jpj,   f_ocndpco2_2d   ) 
    4953                      ENDIF 
    4954 # endif                      
    4955                  ELSE IF (jk.eq.i0100) THEN  
     4134             IF( med_diag%RR_0100%dgsave ) THEN 
     4135                CALL iom_put( "RR_0100"  , ffastca2d ) 
     4136             ENDIF 
     4137             IF( med_diag%SDC__100%dgsave ) THEN 
     4138                zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk) 
     4139                CALL iom_put( "SDC__100"  , zw2d ) 
     4140             ENDIF 
     4141             IF( med_diag%epC100%dgsave    ) THEN 
     4142                zw2d(:,:) = (fslowcflux + ffastc) * tmask(:,:,jk) 
     4143                CALL iom_put( "epC100"    , zw2d ) 
     4144             ENDIF 
     4145             IF( med_diag%epCALC100%dgsave ) THEN 
     4146                CALL iom_put( "epCALC100" , ffastca ) 
     4147             ENDIF 
     4148             IF( med_diag%epN100%dgsave    ) THEN 
     4149                zw2d(:,:) = (fslownflux + ffastn) * tmask(:,:,jk) 
     4150                CALL iom_put( "epN100"    , zw2d ) 
     4151             ENDIF 
     4152             IF( med_diag%epSI100%dgsave   ) THEN 
     4153                CALL iom_put( "epSI100"   , ffastsi ) 
     4154             ENDIF 
     4155          ELSE IF (jk.eq.i0150) THEN 
    49564156#   if defined key_debug_medusa 
    4957                      IF (lwp) write (numout,*) 'trc_bio_medusa: diag jk = 100' 
    4958                      CALL flush(numout) 
    4959 #   endif 
    4960                      IF( med_diag%SDT__100%dgsave ) THEN 
    4961                         zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk) 
    4962                         CALL iom_put( "SDT__100"  , zw2d ) 
    4963                      ENDIF 
    4964                      IF( med_diag%REG__100%dgsave ) THEN 
    4965                         CALL iom_put( "REG__100"  , fregen2d ) 
    4966                      ENDIF 
    4967                      IF( med_diag%FDT__100%dgsave ) THEN 
    4968                         CALL iom_put( "FDT__100"  , ffastn ) 
    4969                      ENDIF            
    4970                      IF( med_diag%RG__100F%dgsave ) THEN 
    4971                         CALL iom_put( "RG__100F"  , fregenfast ) 
    4972                      ENDIF 
    4973                      IF( med_diag%FDS__100%dgsave ) THEN 
    4974                         CALL iom_put( "FDS__100"  , ffastsi ) 
    4975                      ENDIF          
    4976                      IF( med_diag%RGS_100F%dgsave ) THEN 
    4977                         CALL iom_put( "RGS_100F"  , fregenfastsi ) 
    4978                      ENDIF 
    4979                      IF( med_diag%FE_0100%dgsave ) THEN 
    4980                         CALL iom_put( "FE_0100"  , xFree ) 
    4981                      ENDIF 
    4982 # if defined key_roam                      
    4983                      IF( med_diag%RR_0100%dgsave ) THEN 
    4984                         CALL iom_put( "RR_0100"  , ffastca2d ) 
    4985                      ENDIF                      
    4986                      IF( med_diag%SDC__100%dgsave ) THEN 
    4987                         zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk) 
    4988                         CALL iom_put( "SDC__100"  , zw2d ) 
    4989                      ENDIF                   
    4990                      IF( med_diag%epC100%dgsave    ) THEN 
    4991                         zw2d(:,:) = (fslowcflux + ffastc) * tmask(:,:,jk) 
    4992                         CALL iom_put( "epC100"    , zw2d ) 
    4993                      ENDIF          
    4994                      IF( med_diag%epCALC100%dgsave ) THEN 
    4995                         CALL iom_put( "epCALC100" , ffastca ) 
    4996                      ENDIF          
    4997                      IF( med_diag%epN100%dgsave    ) THEN 
    4998                         zw2d(:,:) = (fslownflux + ffastn) * tmask(:,:,jk) 
    4999                         CALL iom_put( "epN100"    , zw2d ) 
    5000                      ENDIF          
    5001                      IF( med_diag%epSI100%dgsave   ) THEN 
    5002                         CALL iom_put( "epSI100"   , ffastsi ) 
    5003                      ENDIF          
    5004                  ELSE IF (jk.eq.i0150) THEN 
    5005 #   if defined key_debug_medusa 
    5006                      IF (lwp) write (numout,*) 'trc_bio_medusa: diag jk = 150' 
    5007                      CALL flush(numout) 
     4157             IF ( lwp ) write (numout,*) 'trc_bio_medusa: diag jk = 150' 
     4158             CALL flush(numout) 
    50084159#   endif 
    50094160# endif                      
    5010                  ELSE IF (jk.eq.i0200) THEN 
     4161          ELSE IF (jk.eq.i0200) THEN 
    50114162#   if defined key_debug_medusa 
    5012                      IF (lwp) write (numout,*) 'trc_bio_medusa: diag jk = 200' 
    5013                      CALL flush(numout) 
     4163             IF ( lwp ) write (numout,*) 'trc_bio_medusa: diag jk = 200' 
     4164             CALL flush(numout) 
    50144165#   endif 
    5015                      IF( med_diag%SDT__200%dgsave ) THEN 
    5016                         zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk) 
    5017                         CALL iom_put( "SDT__200"  , zw2d ) 
    5018                      ENDIF 
    5019                      IF( med_diag%REG__200%dgsave ) THEN 
    5020                         CALL iom_put( "REG__200"  , fregen2d ) 
    5021                      ENDIF 
    5022                      IF( med_diag%FDT__200%dgsave ) THEN 
    5023                         CALL iom_put( "FDT__200"  , ffastn ) 
    5024                      ENDIF 
    5025                      IF( med_diag%RG__200F%dgsave ) THEN 
    5026                         CALL iom_put( "RG__200F"  , fregenfast ) 
    5027                      ENDIF 
    5028                      IF( med_diag%FDS__200%dgsave ) THEN 
    5029                         CALL iom_put( "FDS__200"  , ffastsi ) 
    5030                      ENDIF 
    5031                      IF( med_diag%RGS_200F%dgsave ) THEN 
    5032                         CALL iom_put( "RGS_200F"  , fregenfastsi ) 
    5033                      ENDIF 
    5034                      IF( med_diag%FE_0200%dgsave ) THEN 
    5035                         CALL iom_put( "FE_0200"   , xFree ) 
    5036                      ENDIF 
     4166             IF( med_diag%SDT__200%dgsave ) THEN 
     4167                zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk) 
     4168                CALL iom_put( "SDT__200"  , zw2d ) 
     4169             ENDIF 
     4170             IF( med_diag%REG__200%dgsave ) THEN 
     4171                CALL iom_put( "REG__200"  , fregen2d ) 
     4172             ENDIF 
     4173             IF( med_diag%FDT__200%dgsave ) THEN 
     4174                CALL iom_put( "FDT__200"  , ffastn ) 
     4175             ENDIF 
     4176             IF( med_diag%RG__200F%dgsave ) THEN 
     4177                CALL iom_put( "RG__200F"  , fregenfast ) 
     4178             ENDIF 
     4179             IF( med_diag%FDS__200%dgsave ) THEN 
     4180                CALL iom_put( "FDS__200"  , ffastsi ) 
     4181             ENDIF 
     4182             IF( med_diag%RGS_200F%dgsave ) THEN 
     4183                CALL iom_put( "RGS_200F"  , fregenfastsi ) 
     4184             ENDIF 
     4185             IF( med_diag%FE_0200%dgsave ) THEN 
     4186                CALL iom_put( "FE_0200"   , xFree ) 
     4187             ENDIF 
    50374188# if defined key_roam                      
    5038                      IF( med_diag%SDC__200%dgsave ) THEN 
    5039                         zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk) 
    5040                         CALL iom_put( "SDC__200"  , zw2d ) 
    5041                      ENDIF 
     4189             IF( med_diag%SDC__200%dgsave ) THEN 
     4190                zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk) 
     4191                CALL iom_put( "SDC__200"  , zw2d ) 
     4192             ENDIF 
    50424193# endif                      
    5043                  ELSE IF (jk.eq.i0500) THEN 
     4194          ELSE IF (jk.eq.i0500) THEN 
    50444195#   if defined key_debug_medusa 
    5045                      IF (lwp) write (numout,*) 'trc_bio_medusa: diag jk = 500' 
    5046                      CALL flush(numout) 
     4196             IF ( lwp ) write (numout,*) 'trc_bio_medusa: diag jk = 500' 
     4197             CALL flush(numout) 
    50474198#   endif 
    5048                      IF( med_diag%SDT__500%dgsave ) THEN 
    5049                         zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk) 
    5050                         CALL iom_put( "SDT__500"  , zw2d ) 
    5051                      ENDIF 
    5052                      IF( med_diag%REG__500%dgsave ) THEN 
    5053                         CALL iom_put( "REG__500"  , fregen2d ) 
    5054                      ENDIF       
    5055                      IF( med_diag%FDT__500%dgsave ) THEN 
    5056                         CALL iom_put( "FDT__500"  , ffastn ) 
    5057                      ENDIF 
    5058                      IF( med_diag%RG__500F%dgsave ) THEN 
    5059                         CALL iom_put( "RG__500F"  , fregenfast ) 
    5060                      ENDIF 
    5061                      IF( med_diag%FDS__500%dgsave ) THEN 
    5062                         CALL iom_put( "FDS__500"  , ffastsi ) 
    5063                      ENDIF 
    5064                      IF( med_diag%RGS_500F%dgsave ) THEN 
    5065                         CALL iom_put( "RGS_500F"  , fregenfastsi ) 
    5066                      ENDIF 
    5067                      IF( med_diag%FE_0500%dgsave ) THEN 
    5068                         CALL iom_put( "FE_0500"  , xFree ) 
    5069                      ENDIF 
     4199             IF( med_diag%SDT__500%dgsave ) THEN 
     4200                zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk) 
     4201                CALL iom_put( "SDT__500"  , zw2d ) 
     4202             ENDIF 
     4203             IF( med_diag%REG__500%dgsave ) THEN 
     4204                CALL iom_put( "REG__500"  , fregen2d ) 
     4205             ENDIF 
     4206             IF( med_diag%FDT__500%dgsave ) THEN 
     4207                CALL iom_put( "FDT__500"  , ffastn ) 
     4208             ENDIF 
     4209             IF( med_diag%RG__500F%dgsave ) THEN 
     4210                CALL iom_put( "RG__500F"  , fregenfast ) 
     4211             ENDIF 
     4212             IF( med_diag%FDS__500%dgsave ) THEN 
     4213                CALL iom_put( "FDS__500"  , ffastsi ) 
     4214             ENDIF 
     4215             IF( med_diag%RGS_500F%dgsave ) THEN 
     4216                CALL iom_put( "RGS_500F"  , fregenfastsi ) 
     4217             ENDIF 
     4218             IF( med_diag%FE_0500%dgsave ) THEN 
     4219                CALL iom_put( "FE_0500"  , xFree ) 
     4220             ENDIF 
    50704221# if defined key_roam                      
    5071                      IF( med_diag%RR_0500%dgsave ) THEN 
    5072                         CALL iom_put( "RR_0500"  , ffastca2d ) 
    5073                      ENDIF 
    5074                      IF( med_diag%SDC__500%dgsave ) THEN 
    5075                         zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk) 
    5076                         CALL iom_put( "SDC__500"  , zw2d ) 
    5077                      ENDIF   
     4222             IF( med_diag%RR_0500%dgsave ) THEN 
     4223                CALL iom_put( "RR_0500"  , ffastca2d ) 
     4224             ENDIF 
     4225             IF( med_diag%SDC__500%dgsave ) THEN 
     4226                zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk) 
     4227                CALL iom_put( "SDC__500"  , zw2d ) 
     4228             ENDIF 
    50784229# endif                       
    5079                  ELSE IF (jk.eq.i1000) THEN 
     4230          ELSE IF (jk.eq.i1000) THEN 
    50804231#   if defined key_debug_medusa 
    5081                      IF (lwp) write (numout,*) 'trc_bio_medusa: diag jk = 1000' 
    5082                      CALL flush(numout) 
     4232             IF ( lwp ) write (numout,*) 'trc_bio_medusa: diag jk = 1000' 
     4233             CALL flush(numout) 
    50834234#   endif 
    5084                      IF( med_diag%SDT_1000%dgsave ) THEN 
    5085                         zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk) 
    5086                         CALL iom_put( "SDT_1000"  , zw2d ) 
    5087                      ENDIF 
    5088                      IF( med_diag%REG_1000%dgsave ) THEN 
    5089                         CALL iom_put( "REG_1000"  , fregen2d ) 
    5090                      ENDIF   
    5091                      IF( med_diag%FDT_1000%dgsave ) THEN 
    5092                         CALL iom_put( "FDT_1000"  , ffastn ) 
    5093                      ENDIF 
    5094                      IF( med_diag%RG_1000F%dgsave ) THEN 
    5095                         CALL iom_put( "RG_1000F"  , fregenfast ) 
    5096                      ENDIF 
    5097                      IF( med_diag%FDS_1000%dgsave ) THEN 
    5098                         CALL iom_put( "FDS_1000"  , ffastsi ) 
    5099                      ENDIF 
    5100                      IF( med_diag%RGS1000F%dgsave ) THEN 
    5101                         CALL iom_put( "RGS1000F"  , fregenfastsi ) 
    5102                      ENDIF 
    5103                      IF( med_diag%FE_1000%dgsave ) THEN 
    5104                         CALL iom_put( "FE_1000"  , xFree ) 
    5105                      ENDIF 
     4235             IF( med_diag%SDT_1000%dgsave ) THEN 
     4236                zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk) 
     4237                CALL iom_put( "SDT_1000"  , zw2d ) 
     4238             ENDIF 
     4239             IF( med_diag%REG_1000%dgsave ) THEN 
     4240                CALL iom_put( "REG_1000"  , fregen2d ) 
     4241             ENDIF 
     4242             IF( med_diag%FDT_1000%dgsave ) THEN 
     4243                CALL iom_put( "FDT_1000"  , ffastn ) 
     4244             ENDIF 
     4245             IF( med_diag%RG_1000F%dgsave ) THEN 
     4246                CALL iom_put( "RG_1000F"  , fregenfast ) 
     4247             ENDIF 
     4248             IF( med_diag%FDS_1000%dgsave ) THEN 
     4249                CALL iom_put( "FDS_1000"  , ffastsi ) 
     4250             ENDIF 
     4251             IF( med_diag%RGS1000F%dgsave ) THEN 
     4252                CALL iom_put( "RGS1000F"  , fregenfastsi ) 
     4253             ENDIF 
     4254             IF( med_diag%FE_1000%dgsave ) THEN 
     4255                CALL iom_put( "FE_1000"  , xFree ) 
     4256             ENDIF 
    51064257# if defined key_roam                      
    5107                      IF( med_diag%RR_1000%dgsave ) THEN 
    5108                         CALL iom_put( "RR_1000"  , ffastca2d ) 
    5109                         CALL wrk_dealloc( jpi, jpj,  ffastca2d    ) 
    5110                      ENDIF 
    5111                      IF( med_diag%SDC_1000%dgsave ) THEN 
    5112                         zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk) 
    5113                         CALL iom_put( "SDC_1000"  , zw2d ) 
    5114                      ENDIF  
     4258             IF( med_diag%RR_1000%dgsave ) THEN 
     4259                CALL iom_put( "RR_1000"  , ffastca2d ) 
     4260                CALL wrk_dealloc( jpi, jpj,  ffastca2d    ) 
     4261             ENDIF 
     4262             IF( med_diag%SDC_1000%dgsave ) THEN 
     4263                zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk) 
     4264                CALL iom_put( "SDC_1000"  , zw2d ) 
     4265             ENDIF 
    51154266# endif                       
    5116                  ENDIF 
    5117                  !! to do on every k loop : 
    5118                  IF( med_diag%DETFLUX3%dgsave ) THEN 
    5119                       detflux3d(:,:,jk) = (fslownflux(:,:) + ffastn(:,:)) * tmask(:,:,jk) !! detrital flux 
    5120                       !CALL iom_put( "DETFLUX3"  , ftot_n ) 
    5121                  ENDIF 
     4267          ENDIF 
     4268          !! to do on every k loop : 
     4269          IF( med_diag%DETFLUX3%dgsave ) THEN 
     4270             detflux3d(:,:,jk) = (fslownflux(:,:) + ffastn(:,:)) * tmask(:,:,jk) !! detrital flux 
     4271             !CALL iom_put( "DETFLUX3"  , ftot_n ) 
     4272          ENDIF 
    51224273# if defined key_roam                      
    5123                  IF( med_diag%EXPC3%dgsave ) THEN 
    5124                     expc3(:,:,jk) = (fslowcflux(:,:) + ffastc(:,:)) * tmask(:,:,jk) 
    5125                  ENDIF           
    5126                  IF( med_diag%EXPN3%dgsave ) THEN 
    5127                     expn3(:,:,jk) = (fslownflux(:,:) + ffastn(:,:)) * tmask(:,:,jk) 
    5128                  ENDIF           
     4274          IF( med_diag%EXPC3%dgsave ) THEN 
     4275             expc3(:,:,jk) = (fslowcflux(:,:) + ffastc(:,:)) * tmask(:,:,jk) 
     4276          ENDIF 
     4277          IF( med_diag%EXPN3%dgsave ) THEN 
     4278             expn3(:,:,jk) = (fslownflux(:,:) + ffastn(:,:)) * tmask(:,:,jk) 
     4279          ENDIF 
    51294280# endif           
    5130               ENDIF 
    5131       !! CLOSE vertical loop 
    5132       ENDDO 
    5133  
    5134       !!---------------------------------------------------------------------- 
    5135       !! Process benthic in/out fluxes 
    5136       !! These can be handled outside of the 3D calculations since the 
    5137       !! benthic pools (and fluxes) are 2D in nature; this code is 
    5138       !! (shamelessly) borrowed from corresponding code in the LOBSTER 
    5139       !! model 
    5140       !!---------------------------------------------------------------------- 
    5141       !! 
    5142       !! IF(lwp) WRITE(numout,*) 'AXY: rdt = ', rdt 
    5143       if (jorgben.eq.1) then 
    5144          za_sed_n(:,:)  = zn_sed_n(:,:)  + &  
    5145          &                ( f_sbenin_n(:,:)  + f_fbenin_n(:,:)  - f_benout_n(:,:)  ) * (rdt / 86400.) 
    5146          zn_sed_n(:,:)  = za_sed_n(:,:) 
    5147          !! 
    5148          za_sed_fe(:,:) = zn_sed_fe(:,:) + & 
    5149          &                ( f_sbenin_fe(:,:) + f_fbenin_fe(:,:) - f_benout_fe(:,:) ) * (rdt / 86400.) 
    5150          zn_sed_fe(:,:) = za_sed_fe(:,:) 
    5151          !! 
    5152          za_sed_c(:,:)  = zn_sed_c(:,:)  + & 
    5153          &                ( f_sbenin_c(:,:)  + f_fbenin_c(:,:)  - f_benout_c(:,:)  ) * (rdt / 86400.) 
    5154          zn_sed_c(:,:)  = za_sed_c(:,:) 
    5155       endif 
    5156       if (jinorgben.eq.1) then 
    5157          za_sed_si(:,:) = zn_sed_si(:,:) + &  
    5158          &                ( f_fbenin_si(:,:) - f_benout_si(:,:) ) * (rdt / 86400.) 
    5159          zn_sed_si(:,:) = za_sed_si(:,:) 
    5160          !! 
    5161          za_sed_ca(:,:) = zn_sed_ca(:,:) + & 
    5162          &                ( f_fbenin_ca(:,:) - f_benout_ca(:,:) ) * (rdt / 86400.) 
    5163          zn_sed_ca(:,:) = za_sed_ca(:,:) 
    5164       endif 
    5165       IF( ln_diatrc ) THEN 
    5166          DO jj = 2,jpjm1 
    5167             DO ji = 2,jpim1 
    5168                trc2d(ji,jj,131) = za_sed_n(ji,jj) 
    5169                trc2d(ji,jj,132) = za_sed_fe(ji,jj) 
    5170                trc2d(ji,jj,133) = za_sed_c(ji,jj) 
    5171                trc2d(ji,jj,134) = za_sed_si(ji,jj) 
    5172                trc2d(ji,jj,135) = za_sed_ca(ji,jj) 
    5173             ENDDO 
    5174          ENDDO 
    5175          !! AXY (07/07/15): temporary hijacking 
    5176 # if defined key_roam 
    5177   !!       trc2d(:,:,126) = zn_dms_chn(:,:) 
    5178   !!       trc2d(:,:,127) = zn_dms_chd(:,:) 
    5179   !!       trc2d(:,:,128) = zn_dms_mld(:,:) 
    5180   !!       trc2d(:,:,129) = zn_dms_qsr(:,:) 
    5181   !!       trc2d(:,:,130) = zn_dms_din(:,:) 
     4281       ENDIF 
     4282       !! CLOSE vertical loop 
     4283    ENDDO 
     4284 
     4285    !!---------------------------------------------------------------------- 
     4286    !! Process benthic in/out fluxes 
     4287    !! These can be handled outside of the 3D calculations since the 
     4288    !! benthic pools (and fluxes) are 2D in nature; this code is 
     4289    !! (shamelessly) borrowed from corresponding code in the LOBSTER 
     4290    !! model 
     4291    !!---------------------------------------------------------------------- 
     4292    !! 
     4293    !! IF(lwp) WRITE(numout,*) 'AXY: rdt = ', rdt 
     4294    if (jorgben.eq.1) then 
     4295       za_sed_n(:,:)  = zn_sed_n(:,:)  + &  
     4296            &                ( f_sbenin_n(:,:)  + f_fbenin_n(:,:)  - f_benout_n(:,:)  ) * (rdt / 86400.) 
     4297       zn_sed_n(:,:)  = za_sed_n(:,:) 
     4298       !! 
     4299       za_sed_fe(:,:) = zn_sed_fe(:,:) + & 
     4300            &                ( f_sbenin_fe(:,:) + f_fbenin_fe(:,:) - f_benout_fe(:,:) ) * (rdt / 86400.) 
     4301       zn_sed_fe(:,:) = za_sed_fe(:,:) 
     4302       !! 
     4303       za_sed_c(:,:)  = zn_sed_c(:,:)  + & 
     4304            &                ( f_sbenin_c(:,:)  + f_fbenin_c(:,:)  - f_benout_c(:,:)  ) * (rdt / 86400.) 
     4305       zn_sed_c(:,:)  = za_sed_c(:,:) 
     4306    endif 
     4307    if (jinorgben.eq.1) then 
     4308       za_sed_si(:,:) = zn_sed_si(:,:) + &  
     4309            &                ( f_fbenin_si(:,:) - f_benout_si(:,:) ) * (rdt / 86400.) 
     4310       zn_sed_si(:,:) = za_sed_si(:,:) 
     4311       !! 
     4312       za_sed_ca(:,:) = zn_sed_ca(:,:) + & 
     4313            &                ( f_fbenin_ca(:,:) - f_benout_ca(:,:) ) * (rdt / 86400.) 
     4314       zn_sed_ca(:,:) = za_sed_ca(:,:) 
     4315    endif 
     4316    !! 
     4317    if (ibenthic.eq.2) then 
     4318       !! The code below (in this if ... then ... endif loop) is 
     4319       !! effectively commented out because it does not work as  
     4320       !! anticipated; it can be deleted at a later date 
     4321       if (jorgben.eq.1) then 
     4322          za_sed_n(:,:)  = ( f_sbenin_n(:,:)  + f_fbenin_n(:,:)  - f_benout_n(:,:)  ) * rdt 
     4323          za_sed_fe(:,:) = ( f_sbenin_fe(:,:) + f_fbenin_fe(:,:) - f_benout_fe(:,:) ) * rdt 
     4324          za_sed_c(:,:)  = ( f_sbenin_c(:,:)  + f_fbenin_c(:,:)  - f_benout_c(:,:)  ) * rdt 
     4325       endif 
     4326       if (jinorgben.eq.1) then 
     4327          za_sed_si(:,:) = ( f_fbenin_si(:,:) - f_benout_si(:,:) ) * rdt 
     4328          za_sed_ca(:,:) = ( f_fbenin_ca(:,:) - f_benout_ca(:,:) ) * rdt 
     4329       endif 
     4330       !! 
     4331       !! Leap-frog scheme - only in explicit case, otherwise the time stepping 
     4332       !! is already being done in trczdf 
     4333       !! IF( l_trczdf_exp .AND. (ln_trcadv_cen2 .OR. ln_trcadv_tvd) ) THEN 
     4334       !!    zfact = 2. * rdttra(jk) * FLOAT( ndttrc ) 
     4335       !!    IF( neuler == 0 .AND. kt == nittrc000 )   zfact = rdttra(jk) * FLOAT(ndttrc) 
     4336       !!    if (jorgben.eq.1) then 
     4337       !!       za_sed_n(:,:)  = zb_sed_n(:,:)  + ( zfact * za_sed_n(:,:)  ) 
     4338       !!      za_sed_fe(:,:) = zb_sed_fe(:,:) + ( zfact * za_sed_fe(:,:) ) 
     4339       !!       za_sed_c(:,:)  = zb_sed_c(:,:)  + ( zfact * za_sed_c(:,:)  ) 
     4340       !!    endif 
     4341       !!    if (jinorgben.eq.1) then 
     4342       !!       za_sed_si(:,:) = zb_sed_si(:,:) + ( zfact * za_sed_si(:,:) ) 
     4343       !!       za_sed_ca(:,:) = zb_sed_ca(:,:) + ( zfact * za_sed_ca(:,:) ) 
     4344       !!    endif 
     4345       !! ENDIF 
     4346       !!  
     4347       !! Time filter and swap of arrays 
     4348       IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd  ) THEN ! centred or tvd scheme 
     4349          IF( neuler == 0 .AND. kt == nittrc000 ) THEN 
     4350             if (jorgben.eq.1) then 
     4351                zb_sed_n(:,:)  = zn_sed_n(:,:) 
     4352                zn_sed_n(:,:)  = za_sed_n(:,:) 
     4353                za_sed_n(:,:)  = 0.0 
     4354                !! 
     4355                zb_sed_fe(:,:) = zn_sed_fe(:,:) 
     4356                zn_sed_fe(:,:) = za_sed_fe(:,:) 
     4357                za_sed_fe(:,:) = 0.0 
     4358                !! 
     4359                zb_sed_c(:,:)  = zn_sed_c(:,:) 
     4360                zn_sed_c(:,:)  = za_sed_c(:,:) 
     4361                za_sed_c(:,:)  = 0.0 
     4362             endif 
     4363             if (jinorgben.eq.1) then 
     4364                zb_sed_si(:,:) = zn_sed_si(:,:) 
     4365                zn_sed_si(:,:) = za_sed_si(:,:) 
     4366                za_sed_si(:,:) = 0.0 
     4367                !! 
     4368                zb_sed_ca(:,:) = zn_sed_ca(:,:) 
     4369                zn_sed_ca(:,:) = za_sed_ca(:,:) 
     4370                za_sed_ca(:,:) = 0.0 
     4371             endif 
     4372          ELSE 
     4373             if (jorgben.eq.1) then 
     4374                zb_sed_n(:,:)  = (atfp  * ( zb_sed_n(:,:)  + za_sed_n(:,:)  )) + (atfp1 * zn_sed_n(:,:) ) 
     4375                zn_sed_n(:,:)  = za_sed_n(:,:) 
     4376                za_sed_n(:,:)  = 0.0 
     4377                !! 
     4378                zb_sed_fe(:,:) = (atfp  * ( zb_sed_fe(:,:) + za_sed_fe(:,:) )) + (atfp1 * zn_sed_fe(:,:)) 
     4379                zn_sed_fe(:,:) = za_sed_fe(:,:) 
     4380                za_sed_fe(:,:) = 0.0 
     4381                !! 
     4382                zb_sed_c(:,:)  = (atfp  * ( zb_sed_c(:,:)  + za_sed_c(:,:)  )) + (atfp1 * zn_sed_c(:,:) ) 
     4383                zn_sed_c(:,:)  = za_sed_c(:,:) 
     4384                za_sed_c(:,:)  = 0.0 
     4385             endif 
     4386             if (jinorgben.eq.1) then 
     4387                zb_sed_si(:,:) = (atfp  * ( zb_sed_si(:,:) + za_sed_si(:,:) )) + (atfp1 * zn_sed_si(:,:)) 
     4388                zn_sed_si(:,:) = za_sed_si(:,:) 
     4389                za_sed_si(:,:) = 0.0 
     4390                !! 
     4391                zb_sed_ca(:,:) = (atfp  * ( zb_sed_ca(:,:) + za_sed_ca(:,:) )) + (atfp1 * zn_sed_ca(:,:)) 
     4392                zn_sed_ca(:,:) = za_sed_ca(:,:) 
     4393                za_sed_ca(:,:) = 0.0 
     4394             endif 
     4395          ENDIF 
     4396       ELSE                   !  case of smolar scheme or muscl 
     4397          if (jorgben.eq.1) then 
     4398             zb_sed_n(:,:)  = za_sed_n(:,:) 
     4399             zn_sed_n(:,:)  = za_sed_n(:,:) 
     4400             za_sed_n(:,:)  = 0.0 
     4401             !! 
     4402             zb_sed_fe(:,:) = za_sed_fe(:,:) 
     4403             zn_sed_fe(:,:) = za_sed_fe(:,:) 
     4404             za_sed_fe(:,:) = 0.0 
     4405             !! 
     4406             zb_sed_c(:,:)  = za_sed_c(:,:) 
     4407             zn_sed_c(:,:)  = za_sed_c(:,:) 
     4408             za_sed_c(:,:)  = 0.0 
     4409          endif 
     4410          if (jinorgben.eq.1) then 
     4411             zb_sed_si(:,:) = za_sed_si(:,:) 
     4412             zn_sed_si(:,:) = za_sed_si(:,:) 
     4413             za_sed_si(:,:) = 0.0 
     4414             !! 
     4415             zb_sed_ca(:,:) = za_sed_ca(:,:) 
     4416             zn_sed_ca(:,:) = za_sed_ca(:,:) 
     4417             za_sed_ca(:,:) = 0.0 
     4418          endif 
     4419       ENDIF 
     4420    endif 
     4421 
     4422    !!----------------------------------------------------------------------- 
     4423    !! Add very last diag calculations  
     4424    !!----------------------------------------------------------------------- 
     4425    DO jj = 2,jpjm1 
     4426       DO ji = 2,jpim1 
     4427          !!          
     4428          IF( med_diag%PN_JLIM%dgsave ) THEN 
     4429             fjln2d(ji,jj) = fjln2d(ji,jj)   / MAX(ftot_pn(ji,jj), rsmall) 
     4430          ENDIF 
     4431          IF( med_diag%PN_NLIM%dgsave ) THEN 
     4432             fnln2d(ji,jj) = fnln2d(ji,jj)   / MAX(ftot_pn(ji,jj), rsmall) 
     4433          ENDIF 
     4434          IF( med_diag%PN_FELIM%dgsave ) THEN 
     4435             ffln2d(ji,jj) = ffln2d(ji,jj)   / MAX(ftot_pn(ji,jj), rsmall) 
     4436          ENDIF 
     4437          IF( med_diag%PD_JLIM%dgsave ) THEN 
     4438             fjld2d(ji,jj) = fjld2d(ji,jj)   / MAX(ftot_pd(ji,jj), rsmall) 
     4439          ENDIF 
     4440          IF( med_diag%PD_NLIM%dgsave ) THEN 
     4441             fnld2d(ji,jj) = fnld2d(ji,jj)   / MAX(ftot_pd(ji,jj), rsmall) 
     4442          ENDIF 
     4443          IF( med_diag%PD_FELIM%dgsave ) THEN 
     4444             ffld2d(ji,jj) = ffld2d(ji,jj)   / MAX(ftot_pd(ji,jj), rsmall) 
     4445          ENDIF 
     4446          IF( med_diag%PD_SILIM%dgsave ) THEN 
     4447             fsld2d2(ji,jj) = fsld2d2(ji,jj) / MAX(ftot_pd(ji,jj), rsmall) 
     4448          ENDIF 
     4449          IF( med_diag%PDSILIM2%dgsave ) THEN 
     4450             fsld2d(ji,jj) = fsld2d(ji,jj)   / MAX(ftot_pd(ji,jj), rsmall) 
     4451          ENDIF 
     4452       ENDDO 
     4453    ENDDO 
     4454 
     4455    !!---------------------------------------------------------------------- 
     4456    !! Add in XML diagnostics stuff 
     4457    !!---------------------------------------------------------------------- 
     4458    !! 
     4459    !! ** 2D diagnostics 
     4460#   if defined key_debug_medusa 
     4461    IF ( lwp ) write (numout,*) 'trc_bio_medusa: export all diag.' 
     4462    CALL flush(numout) 
     4463#   endif 
     4464    IF ( med_diag%INVTN%dgsave ) THEN 
     4465       CALL iom_put( "INVTN"  , ftot_n ) 
     4466    ENDIF 
     4467    IF ( med_diag%INVTSI%dgsave ) THEN 
     4468       CALL iom_put( "INVTSI"  , ftot_si ) 
     4469    ENDIF 
     4470    IF ( med_diag%INVTFE%dgsave ) THEN 
     4471       CALL iom_put( "INVTFE"  , ftot_fe ) 
     4472    ENDIF 
     4473    IF ( med_diag%ML_PRN%dgsave ) THEN 
     4474       CALL iom_put( "ML_PRN"  , fprn_ml ) 
     4475    ENDIF 
     4476    IF ( med_diag%ML_PRD%dgsave ) THEN 
     4477       CALL iom_put( "ML_PRD"  , fprd_ml ) 
     4478    ENDIF 
     4479    IF ( med_diag%OCAL_LVL%dgsave ) THEN 
     4480       CALL iom_put( "OCAL_LVL"  , fccd ) 
     4481    ENDIF 
     4482    IF ( med_diag%PN_JLIM%dgsave ) THEN 
     4483       CALL iom_put( "PN_JLIM"  , fjln2d ) 
     4484       CALL wrk_dealloc( jpi, jpj,   fjln2d   ) 
     4485    ENDIF 
     4486    IF ( med_diag%PN_NLIM%dgsave ) THEN 
     4487       CALL iom_put( "PN_NLIM"  , fnln2d ) 
     4488       CALL wrk_dealloc( jpi, jpj,   fnln2d   ) 
     4489    ENDIF 
     4490    IF ( med_diag%PN_FELIM%dgsave ) THEN 
     4491       CALL iom_put( "PN_FELIM"  , ffln2d ) 
     4492       CALL wrk_dealloc( jpi, jpj,   ffln2d   ) 
     4493    ENDIF 
     4494    IF ( med_diag%PD_JLIM%dgsave ) THEN 
     4495       CALL iom_put( "PD_JLIM"  , fjld2d ) 
     4496       CALL wrk_dealloc( jpi, jpj,  fjld2d    ) 
     4497    ENDIF 
     4498    IF ( med_diag%PD_NLIM%dgsave ) THEN 
     4499       CALL iom_put( "PD_NLIM"  , fnld2d ) 
     4500       CALL wrk_dealloc( jpi, jpj,   fnld2d  ) 
     4501    ENDIF 
     4502    IF ( med_diag%PD_FELIM%dgsave ) THEN 
     4503       CALL iom_put( "PD_FELIM"  , ffld2d ) 
     4504       CALL wrk_dealloc( jpi, jpj,  ffld2d    ) 
     4505    ENDIF 
     4506    IF ( med_diag%PD_SILIM%dgsave ) THEN 
     4507       CALL iom_put( "PD_SILIM"  , fsld2d2 ) 
     4508       CALL wrk_dealloc( jpi, jpj,   fsld2d2   ) 
     4509    ENDIF 
     4510    IF ( med_diag%PDSILIM2%dgsave ) THEN 
     4511       CALL iom_put( "PDSILIM2"  , fsld2d ) 
     4512       CALL wrk_dealloc( jpi, jpj,   fsld2d   ) 
     4513    ENDIF 
     4514    IF ( med_diag%INTFLX_N%dgsave ) THEN 
     4515       CALL iom_put( "INTFLX_N"  , fflx_n ) 
     4516    ENDIF 
     4517    IF ( med_diag%INTFLX_SI%dgsave ) THEN 
     4518       CALL iom_put( "INTFLX_SI"  , fflx_si ) 
     4519    ENDIF 
     4520    IF ( med_diag%INTFLX_FE%dgsave ) THEN 
     4521       CALL iom_put( "INTFLX_FE"  , fflx_fe ) 
     4522    ENDIF 
     4523    IF ( med_diag%INT_PN%dgsave ) THEN 
     4524       CALL iom_put( "INT_PN"  , ftot_pn ) 
     4525    ENDIF 
     4526    IF ( med_diag%INT_PD%dgsave ) THEN 
     4527       CALL iom_put( "INT_PD"  , ftot_pd ) 
     4528    ENDIF 
     4529    IF ( med_diag%INT_ZMI%dgsave ) THEN 
     4530       CALL iom_put( "INT_ZMI"  , ftot_zmi ) 
     4531    ENDIF 
     4532    IF ( med_diag%INT_ZME%dgsave ) THEN 
     4533       CALL iom_put( "INT_ZME"  , ftot_zme ) 
     4534    ENDIF 
     4535    IF ( med_diag%INT_DET%dgsave ) THEN 
     4536       CALL iom_put( "INT_DET"  , ftot_det ) 
     4537    ENDIF 
     4538    IF ( med_diag%INT_DTC%dgsave ) THEN 
     4539       CALL iom_put( "INT_DTC"  , ftot_dtc ) 
     4540    ENDIF 
     4541    IF ( med_diag%BEN_N%dgsave ) THEN 
     4542       CALL iom_put( "BEN_N"  , za_sed_n ) 
     4543    ENDIF 
     4544    IF ( med_diag%BEN_FE%dgsave ) THEN 
     4545       CALL iom_put( "BEN_FE"  , za_sed_fe ) 
     4546    ENDIF 
     4547    IF ( med_diag%BEN_C%dgsave ) THEN 
     4548       CALL iom_put( "BEN_C"  , za_sed_c ) 
     4549    ENDIF 
     4550    IF ( med_diag%BEN_SI%dgsave ) THEN 
     4551       CALL iom_put( "BEN_SI"  , za_sed_si ) 
     4552    ENDIF 
     4553    IF ( med_diag%BEN_CA%dgsave ) THEN 
     4554       CALL iom_put( "BEN_CA"  , za_sed_ca ) 
     4555    ENDIF 
     4556    IF ( med_diag%RUNOFF%dgsave ) THEN 
     4557       CALL iom_put( "RUNOFF"  , f_runoff ) 
     4558    ENDIF 
     4559# if defined key_roam         
     4560    IF ( med_diag%N_PROD%dgsave ) THEN 
     4561       CALL iom_put( "N_PROD"  , fnit_prod ) 
     4562    ENDIF 
     4563    IF ( med_diag%N_CONS%dgsave ) THEN 
     4564       CALL iom_put( "N_CONS"  , fnit_cons ) 
     4565    ENDIF 
     4566    IF ( med_diag%C_PROD%dgsave ) THEN 
     4567       CALL iom_put( "C_PROD"  , fcar_prod ) 
     4568    ENDIF 
     4569    IF ( med_diag%C_CONS%dgsave ) THEN 
     4570       CALL iom_put( "C_CONS"  , fcar_cons ) 
     4571    ENDIF 
     4572    IF ( med_diag%O2_PROD%dgsave ) THEN 
     4573       CALL iom_put( "O2_PROD"  , foxy_prod ) 
     4574    ENDIF 
     4575    IF ( med_diag%O2_CONS%dgsave ) THEN 
     4576       CALL iom_put( "O2_CONS"  , foxy_cons ) 
     4577    ENDIF 
     4578    IF ( med_diag%O2_ANOX%dgsave ) THEN 
     4579       CALL iom_put( "O2_ANOX"  , foxy_anox ) 
     4580    ENDIF 
     4581    IF ( med_diag%INVTC%dgsave ) THEN 
     4582       CALL iom_put( "INVTC"  , ftot_c ) 
     4583    ENDIF 
     4584    IF ( med_diag%INVTALK%dgsave ) THEN 
     4585       CALL iom_put( "INVTALK"  , ftot_a ) 
     4586    ENDIF 
     4587    IF ( med_diag%INVTO2%dgsave ) THEN 
     4588       CALL iom_put( "INVTO2"  , ftot_o2 ) 
     4589    ENDIF 
     4590    IF ( med_diag%COM_RESP%dgsave ) THEN 
     4591       CALL iom_put( "COM_RESP"  , fcomm_resp ) 
     4592    ENDIF 
     4593# endif       
     4594    !! 
     4595    !! diagnostic filled in the i-j-k main loop 
     4596    !!-------------------------------------------- 
     4597    IF ( med_diag%PRN%dgsave ) THEN 
     4598       CALL iom_put( "PRN"  , fprn2d ) 
     4599       CALL wrk_dealloc( jpi, jpj,   fprn2d   ) 
     4600    ENDIF 
     4601    IF ( med_diag%MPN%dgsave ) THEN 
     4602       CALL iom_put( "MPN"  ,fdpn2d  ) 
     4603       CALL wrk_dealloc( jpi, jpj,    fdpn2d  ) 
     4604    ENDIF 
     4605    IF ( med_diag%PRD%dgsave ) THEN 
     4606       CALL iom_put( "PRD"  ,fprd2d  ) 
     4607       CALL wrk_dealloc( jpi, jpj,   fprd2d  ) 
     4608    ENDIF 
     4609    IF( med_diag%MPD%dgsave ) THEN 
     4610       CALL iom_put( "MPD"  , fdpd2d ) 
     4611       CALL wrk_dealloc( jpi, jpj,    fdpd2d ) 
     4612    ENDIF 
     4613    !  IF( med_diag%DSED%dgsave ) THEN 
     4614    !      CALL iom_put( "DSED"  , ftot_n ) 
     4615    !  ENDIF 
     4616    IF( med_diag%OPAL%dgsave ) THEN 
     4617       CALL iom_put( "OPAL"  , fprds2d ) 
     4618       CALL wrk_dealloc( jpi, jpj,   fprds2d  ) 
     4619    ENDIF 
     4620    IF( med_diag%OPALDISS%dgsave ) THEN 
     4621       CALL iom_put( "OPALDISS"  , fsdiss2d ) 
     4622       CALL wrk_dealloc( jpi, jpj,   fsdiss2d  ) 
     4623    ENDIF 
     4624    IF( med_diag%GMIPn%dgsave ) THEN 
     4625       CALL iom_put( "GMIPn"  , fgmipn2d ) 
     4626       CALL wrk_dealloc( jpi, jpj,   fgmipn2d  ) 
     4627    ENDIF 
     4628    IF( med_diag%GMID%dgsave ) THEN 
     4629       CALL iom_put( "GMID"  , fgmid2d ) 
     4630       CALL wrk_dealloc( jpi, jpj,  fgmid2d  ) 
     4631    ENDIF 
     4632    IF( med_diag%MZMI%dgsave ) THEN 
     4633       CALL iom_put( "MZMI"  , fdzmi2d ) 
     4634       CALL wrk_dealloc( jpi, jpj,   fdzmi2d   ) 
     4635    ENDIF 
     4636    IF( med_diag%GMEPN%dgsave ) THEN 
     4637       CALL iom_put( "GMEPN"  , fgmepn2d ) 
     4638       CALL wrk_dealloc( jpi, jpj,   fgmepn2d  ) 
     4639    ENDIF 
     4640    IF( med_diag%GMEPD%dgsave ) THEN 
     4641       CALL iom_put( "GMEPD"  , fgmepd2d ) 
     4642       CALL wrk_dealloc( jpi, jpj,   fgmepd2d   ) 
     4643    ENDIF 
     4644    IF( med_diag%GMEZMI%dgsave ) THEN 
     4645       CALL iom_put( "GMEZMI"  , fgmezmi2d ) 
     4646       CALL wrk_dealloc( jpi, jpj,   fgmezmi2d   ) 
     4647    ENDIF 
     4648    IF( med_diag%GMED%dgsave ) THEN 
     4649       CALL iom_put( "GMED"  , fgmed2d ) 
     4650       CALL wrk_dealloc( jpi, jpj,    fgmed2d  ) 
     4651    ENDIF 
     4652    IF( med_diag%MZME%dgsave ) THEN 
     4653       CALL iom_put( "MZME"  , fdzme2d ) 
     4654       CALL wrk_dealloc( jpi, jpj,  fdzme2d    ) 
     4655    ENDIF 
     4656    !  IF( med_diag%DEXP%dgsave ) THEN 
     4657    !      CALL iom_put( "DEXP"  , ftot_n ) 
     4658    !  ENDIF 
     4659    IF( med_diag%DETN%dgsave ) THEN 
     4660       CALL iom_put( "DETN"  , fslown2d ) 
     4661       CALL wrk_dealloc( jpi, jpj,  fslown2d    ) 
     4662    ENDIF 
     4663    IF( med_diag%MDET%dgsave ) THEN 
     4664       CALL iom_put( "MDET"  , fdd2d ) 
     4665       CALL wrk_dealloc( jpi, jpj,   fdd2d   ) 
     4666    ENDIF 
     4667    IF( med_diag%AEOLIAN%dgsave ) THEN 
     4668       CALL iom_put( "AEOLIAN"  , ffetop2d ) 
     4669       CALL wrk_dealloc( jpi, jpj,   ffetop2d   ) 
     4670    ENDIF 
     4671    IF( med_diag%BENTHIC%dgsave ) THEN 
     4672       CALL iom_put( "BENTHIC"  , ffebot2d ) 
     4673       CALL wrk_dealloc( jpi, jpj,   ffebot2d   ) 
     4674    ENDIF 
     4675    IF( med_diag%SCAVENGE%dgsave ) THEN 
     4676       CALL iom_put( "SCAVENGE"  , ffescav2d ) 
     4677       CALL wrk_dealloc( jpi, jpj,   ffescav2d  ) 
     4678    ENDIF 
     4679    !!  
     4680    IF( med_diag%TOTREG_N%dgsave ) THEN 
     4681       CALL iom_put( "TOTREG_N"  , fregen2d ) 
     4682       CALL wrk_dealloc( jpi, jpj,   fregen2d   ) 
     4683    ENDIF 
     4684    IF( med_diag%TOTRG_SI%dgsave ) THEN 
     4685       CALL iom_put( "TOTRG_SI"  , fregensi2d ) 
     4686       CALL wrk_dealloc( jpi, jpj,    fregensi2d  ) 
     4687    ENDIF 
     4688    !!  
     4689    IF( med_diag%FASTN%dgsave ) THEN 
     4690       CALL iom_put( "FASTN"  , ftempn2d ) 
     4691       CALL wrk_dealloc( jpi, jpj,   ftempn2d   ) 
     4692    ENDIF 
     4693    IF( med_diag%FASTSI%dgsave ) THEN 
     4694       CALL iom_put( "FASTSI"  , ftempsi2d ) 
     4695       CALL wrk_dealloc( jpi, jpj,   ftempsi2d   ) 
     4696    ENDIF 
     4697    IF( med_diag%FASTFE%dgsave ) THEN 
     4698       CALL iom_put( "FASTFE"  , ftempfe2d ) 
     4699       CALL wrk_dealloc( jpi, jpj,    ftempfe2d  ) 
     4700    ENDIF 
     4701    IF( med_diag%FASTC%dgsave ) THEN 
     4702       CALL iom_put( "FASTC"  , ftempc2d ) 
     4703       CALL wrk_dealloc( jpi, jpj,  ftempc2d    ) 
     4704    ENDIF 
     4705    IF( med_diag%FASTCA%dgsave ) THEN 
     4706       CALL iom_put( "FASTCA"  , ftempca2d ) 
     4707       CALL wrk_dealloc( jpi, jpj,  ftempca2d   ) 
     4708    ENDIF 
     4709    !!  
     4710    IF( med_diag%REMINN%dgsave ) THEN 
     4711       CALL iom_put( "REMINN"  , freminn2d ) 
     4712       CALL wrk_dealloc( jpi, jpj,   freminn2d   ) 
     4713    ENDIF 
     4714    IF( med_diag%REMINSI%dgsave ) THEN 
     4715       CALL iom_put( "REMINSI"  , freminsi2d ) 
     4716       CALL wrk_dealloc( jpi, jpj,   freminsi2d   ) 
     4717    ENDIF 
     4718    IF( med_diag%REMINFE%dgsave ) THEN 
     4719       CALL iom_put( "REMINFE"  , freminfe2d ) 
     4720       CALL wrk_dealloc( jpi, jpj,  freminfe2d    ) 
     4721    ENDIF 
     4722    IF( med_diag%REMINC%dgsave ) THEN 
     4723       CALL iom_put( "REMINC"  , freminc2d ) 
     4724       CALL wrk_dealloc( jpi, jpj,    freminc2d  ) 
     4725    ENDIF 
     4726    IF( med_diag%REMINCA%dgsave ) THEN 
     4727       CALL iom_put( "REMINCA"  , freminca2d ) 
     4728       CALL wrk_dealloc( jpi, jpj,   freminca2d  ) 
     4729    ENDIF 
     4730    IF( med_diag%SEAFLRN%dgsave ) THEN 
     4731       CALL iom_put( "SEAFLRN"  , fsedn ) 
     4732    ENDIF 
     4733    IF( med_diag%SEAFLRSI%dgsave ) THEN 
     4734       CALL iom_put( "SEAFLRSI"  , fsedsi ) 
     4735    ENDIF 
     4736    IF( med_diag%SEAFLRFE%dgsave ) THEN 
     4737       CALL iom_put( "SEAFLRFE"  , fsedfe ) 
     4738    ENDIF 
     4739    IF( med_diag%SEAFLRC%dgsave ) THEN 
     4740       CALL iom_put( "SEAFLRC"  , fsedc ) 
     4741    ENDIF 
     4742    IF( med_diag%SEAFLRCA%dgsave ) THEN 
     4743       CALL iom_put( "SEAFLRCA"  , fsedca ) 
     4744    ENDIF 
     4745    !! 
     4746# if defined key_roam             
     4747    !! 
     4748    IF( med_diag%RIV_N%dgsave ) THEN 
     4749       CALL iom_put( "RIV_N"  , rivn2d ) 
     4750       CALL wrk_dealloc( jpi, jpj,    rivn2d  ) 
     4751    ENDIF 
     4752    IF( med_diag%RIV_SI%dgsave ) THEN 
     4753       CALL iom_put( "RIV_SI"  , rivsi2d ) 
     4754       CALL wrk_dealloc( jpi, jpj,   rivsi2d   ) 
     4755    ENDIF 
     4756    IF( med_diag%RIV_C%dgsave ) THEN 
     4757       CALL iom_put( "RIV_C"  , rivc2d ) 
     4758       CALL wrk_dealloc( jpi, jpj,    rivc2d  ) 
     4759    ENDIF 
     4760    IF( med_diag%RIV_ALK%dgsave ) THEN 
     4761       CALL iom_put( "RIV_ALK"  , rivalk2d ) 
     4762       CALL wrk_dealloc( jpi, jpj,  rivalk2d    ) 
     4763    ENDIF 
     4764    IF( med_diag%DETC%dgsave ) THEN 
     4765       CALL iom_put( "DETC"  , fslowc2d ) 
     4766       CALL wrk_dealloc( jpi, jpj,   fslowc2d   ) 
     4767    ENDIF 
     4768    !! 
     4769    IF( med_diag%PN_LLOSS%dgsave ) THEN 
     4770       CALL iom_put( "PN_LLOSS"  , fdpn22d ) 
     4771       CALL wrk_dealloc( jpi, jpj,   fdpn22d   ) 
     4772    ENDIF 
     4773    IF( med_diag%PD_LLOSS%dgsave ) THEN 
     4774       CALL iom_put( "PD_LLOSS"  , fdpd22d ) 
     4775       CALL wrk_dealloc( jpi, jpj,   fdpd22d   ) 
     4776    ENDIF 
     4777    IF( med_diag%ZI_LLOSS%dgsave ) THEN 
     4778       CALL iom_put( "ZI_LLOSS"  , fdzmi22d ) 
     4779       CALL wrk_dealloc( jpi, jpj,    fdzmi22d  ) 
     4780    ENDIF 
     4781    IF( med_diag%ZE_LLOSS%dgsave ) THEN 
     4782       CALL iom_put( "ZE_LLOSS"  , fdzme22d ) 
     4783       CALL wrk_dealloc( jpi, jpj,   fdzme22d   ) 
     4784    ENDIF 
     4785    IF( med_diag%ZI_MES_N%dgsave ) THEN 
     4786       CALL iom_put( "ZI_MES_N"  , zimesn2d ) 
     4787       CALL wrk_dealloc( jpi, jpj,    zimesn2d  ) 
     4788    ENDIF 
     4789    IF( med_diag%ZI_MES_D%dgsave ) THEN 
     4790       CALL iom_put( "ZI_MES_D"  , zimesd2d ) 
     4791       CALL wrk_dealloc( jpi, jpj,    zimesd2d  ) 
     4792    ENDIF 
     4793    IF( med_diag%ZI_MES_C%dgsave ) THEN 
     4794       CALL iom_put( "ZI_MES_C"  , zimesc2d ) 
     4795       CALL wrk_dealloc( jpi, jpj,    zimesc2d  ) 
     4796    ENDIF 
     4797    IF( med_diag%ZI_MESDC%dgsave ) THEN 
     4798       CALL iom_put( "ZI_MESDC"  ,zimesdc2d  ) 
     4799       CALL wrk_dealloc( jpi, jpj,    zimesdc2d  ) 
     4800    ENDIF 
     4801    IF( med_diag%ZI_EXCR%dgsave ) THEN 
     4802       CALL iom_put( "ZI_EXCR"  , ziexcr2d ) 
     4803       CALL wrk_dealloc( jpi, jpj,    ziexcr2d ) 
     4804    ENDIF 
     4805    IF( med_diag%ZI_RESP%dgsave ) THEN 
     4806       CALL iom_put( "ZI_RESP"  , ziresp2d ) 
     4807       CALL wrk_dealloc( jpi, jpj,   ziresp2d   ) 
     4808    ENDIF 
     4809    IF( med_diag%ZI_GROW%dgsave ) THEN 
     4810       CALL iom_put( "ZI_GROW"  , zigrow2d ) 
     4811       CALL wrk_dealloc( jpi, jpj,   zigrow2d   ) 
     4812    ENDIF 
     4813    IF( med_diag%ZE_MES_N%dgsave ) THEN 
     4814       CALL iom_put( "ZE_MES_N"  , zemesn2d ) 
     4815       CALL wrk_dealloc( jpi, jpj,    zemesn2d  ) 
     4816    ENDIF 
     4817    IF( med_diag%ZE_MES_D%dgsave ) THEN 
     4818       CALL iom_put( "ZE_MES_D"  , zemesd2d ) 
     4819       CALL wrk_dealloc( jpi, jpj,    zemesd2d  ) 
     4820    ENDIF 
     4821    IF( med_diag%ZE_MES_C%dgsave ) THEN 
     4822       CALL iom_put( "ZE_MES_C"  , zemesc2d ) 
     4823       CALL wrk_dealloc( jpi, jpj,   zemesc2d   ) 
     4824    ENDIF 
     4825    IF( med_diag%ZE_MESDC%dgsave ) THEN 
     4826       CALL iom_put( "ZE_MESDC"  , zemesdc2d ) 
     4827       CALL wrk_dealloc( jpi, jpj,   zemesdc2d   ) 
     4828    ENDIF 
     4829    IF( med_diag%ZE_EXCR%dgsave ) THEN 
     4830       CALL iom_put( "ZE_EXCR"  , zeexcr2d ) 
     4831       CALL wrk_dealloc( jpi, jpj,   zeexcr2d   ) 
     4832    ENDIF 
     4833    IF( med_diag%ZE_RESP%dgsave ) THEN 
     4834       CALL iom_put( "ZE_RESP"  , zeresp2d ) 
     4835       CALL wrk_dealloc( jpi, jpj,    zeresp2d  ) 
     4836    ENDIF 
     4837    IF( med_diag%ZE_GROW%dgsave ) THEN 
     4838       CALL iom_put( "ZE_GROW"  , zegrow2d ) 
     4839       CALL wrk_dealloc( jpi, jpj,   zegrow2d   ) 
     4840    ENDIF 
     4841    IF( med_diag%MDETC%dgsave ) THEN 
     4842       CALL iom_put( "MDETC"  , mdetc2d ) 
     4843       CALL wrk_dealloc( jpi, jpj,   mdetc2d   ) 
     4844    ENDIF 
     4845    IF( med_diag%GMIDC%dgsave ) THEN 
     4846       CALL iom_put( "GMIDC"  , gmidc2d ) 
     4847       CALL wrk_dealloc( jpi, jpj,    gmidc2d  ) 
     4848    ENDIF 
     4849    IF( med_diag%GMEDC%dgsave ) THEN 
     4850       CALL iom_put( "GMEDC"  , gmedc2d ) 
     4851       CALL wrk_dealloc( jpi, jpj,    gmedc2d  ) 
     4852    ENDIF 
     4853    IF( med_diag%IBEN_N%dgsave ) THEN 
     4854       CALL iom_put( "IBEN_N"  , iben_n2d ) 
     4855       CALL wrk_dealloc( jpi, jpj,    iben_n2d  ) 
     4856    ENDIF 
     4857    IF( med_diag%IBEN_FE%dgsave ) THEN 
     4858       CALL iom_put( "IBEN_FE"  , iben_fe2d ) 
     4859       CALL wrk_dealloc( jpi, jpj,   iben_fe2d   ) 
     4860    ENDIF 
     4861    IF( med_diag%IBEN_C%dgsave ) THEN 
     4862       CALL iom_put( "IBEN_C"  , iben_c2d ) 
     4863       CALL wrk_dealloc( jpi, jpj,   iben_c2d   ) 
     4864    ENDIF 
     4865    IF( med_diag%IBEN_SI%dgsave ) THEN 
     4866       CALL iom_put( "IBEN_SI"  , iben_si2d ) 
     4867       CALL wrk_dealloc( jpi, jpj,   iben_si2d   ) 
     4868    ENDIF 
     4869    IF( med_diag%IBEN_CA%dgsave ) THEN 
     4870       CALL iom_put( "IBEN_CA"  , iben_ca2d ) 
     4871       CALL wrk_dealloc( jpi, jpj,   iben_ca2d   ) 
     4872    ENDIF 
     4873    IF( med_diag%OBEN_N%dgsave ) THEN 
     4874       CALL iom_put( "OBEN_N"  , oben_n2d ) 
     4875       CALL wrk_dealloc( jpi, jpj,    oben_n2d  ) 
     4876    ENDIF 
     4877    IF( med_diag%OBEN_FE%dgsave ) THEN 
     4878       CALL iom_put( "OBEN_FE"  , oben_fe2d ) 
     4879       CALL wrk_dealloc( jpi, jpj,    oben_fe2d  ) 
     4880    ENDIF 
     4881    IF( med_diag%OBEN_C%dgsave ) THEN 
     4882       CALL iom_put( "OBEN_C"  , oben_c2d ) 
     4883       CALL wrk_dealloc( jpi, jpj,    oben_c2d  ) 
     4884    ENDIF 
     4885    IF( med_diag%OBEN_SI%dgsave ) THEN 
     4886       CALL iom_put( "OBEN_SI"  , oben_si2d ) 
     4887       CALL wrk_dealloc( jpi, jpj,    oben_si2d  ) 
     4888    ENDIF 
     4889    IF( med_diag%OBEN_CA%dgsave ) THEN 
     4890       CALL iom_put( "OBEN_CA"  , oben_ca2d ) 
     4891       CALL wrk_dealloc( jpi, jpj, oben_ca2d     ) 
     4892    ENDIF 
     4893    IF( med_diag%SFR_OCAL%dgsave ) THEN 
     4894       CALL iom_put( "SFR_OCAL"  , sfr_ocal2d ) 
     4895       CALL wrk_dealloc( jpi, jpj,    sfr_ocal2d  ) 
     4896    ENDIF 
     4897    IF( med_diag%SFR_OARG%dgsave ) THEN 
     4898       CALL iom_put( "SFR_OARG"  , sfr_oarg2d ) 
     4899       CALL wrk_dealloc( jpi, jpj,    sfr_oarg2d  ) 
     4900    ENDIF 
     4901    IF( med_diag%LYSO_CA%dgsave ) THEN 
     4902       CALL iom_put( "LYSO_CA"  , lyso_ca2d ) 
     4903       CALL wrk_dealloc( jpi, jpj,    lyso_ca2d  ) 
     4904    ENDIF 
     4905# endif                    
     4906    !! 
     4907    !! ** 3D diagnostics 
     4908    IF( med_diag%TPP3%dgsave ) THEN 
     4909       CALL iom_put( "TPP3"  , tpp3d ) 
     4910       CALL wrk_dealloc( jpi, jpj, jpk,   tpp3d  ) 
     4911    ENDIF 
     4912    IF( med_diag%DETFLUX3%dgsave ) THEN 
     4913       CALL iom_put( "DETFLUX3"  , detflux3d ) 
     4914       CALL wrk_dealloc( jpi, jpj, jpk,    detflux3d ) 
     4915    ENDIF 
     4916    IF( med_diag%REMIN3N%dgsave ) THEN 
     4917       CALL iom_put( "REMIN3N"  , remin3dn ) 
     4918       CALL wrk_dealloc( jpi, jpj, jpk,   remin3dn  ) 
     4919    ENDIF 
     4920# if defined key_roam           
     4921    IF( med_diag%PH3%dgsave ) THEN 
     4922       CALL iom_put( "PH3"  , f3_pH ) 
     4923    ENDIF 
     4924    IF( med_diag%OM_CAL3%dgsave ) THEN 
     4925       CALL iom_put( "OM_CAL3"  , f3_omcal ) 
     4926    ENDIF 
     4927    !! 
     4928    !! AXY (09/11/16): 2D CMIP6 diagnostics 
     4929    IF( med_diag%INTDISSIC%dgsave ) THEN 
     4930       CALL iom_put( "INTDISSIC"  , intdissic ) 
     4931       CALL wrk_dealloc( jpi, jpj, intdissic   ) 
     4932    ENDIF 
     4933    IF( med_diag%INTDISSIN%dgsave ) THEN 
     4934       CALL iom_put( "INTDISSIN"  , intdissin ) 
     4935       CALL wrk_dealloc( jpi, jpj, intdissin   ) 
     4936    ENDIF 
     4937    IF( med_diag%INTDISSISI%dgsave ) THEN 
     4938       CALL iom_put( "INTDISSISI"  , intdissisi ) 
     4939       CALL wrk_dealloc( jpi, jpj, intdissisi  ) 
     4940    ENDIF 
     4941    IF( med_diag%INTTALK%dgsave ) THEN 
     4942       CALL iom_put( "INTTALK"  , inttalk ) 
     4943       CALL wrk_dealloc( jpi, jpj, inttalk     ) 
     4944    ENDIF 
     4945    IF( med_diag%O2min%dgsave ) THEN 
     4946       CALL iom_put( "O2min"  , o2min ) 
     4947       CALL wrk_dealloc( jpi, jpj, o2min       ) 
     4948    ENDIF 
     4949    IF( med_diag%ZO2min%dgsave ) THEN 
     4950       CALL iom_put( "ZO2min"  , zo2min ) 
     4951       CALL wrk_dealloc( jpi, jpj, zo2min      ) 
     4952    ENDIF 
     4953    IF( med_diag%FBDDTALK%dgsave ) THEN 
     4954       CALL iom_put( "FBDDTALK"  , fbddtalk   ) 
     4955       CALL wrk_dealloc( jpi, jpj, fbddtalk   ) 
     4956    ENDIF 
     4957    IF( med_diag%FBDDTDIC%dgsave ) THEN 
     4958       CALL iom_put( "FBDDTDIC"  , fbddtdic   ) 
     4959       CALL wrk_dealloc( jpi, jpj, fbddtdic   ) 
     4960    ENDIF 
     4961    IF( med_diag%FBDDTDIFE%dgsave ) THEN 
     4962       CALL iom_put( "FBDDTDIFE" , fbddtdife  ) 
     4963       CALL wrk_dealloc( jpi, jpj, fbddtdife  ) 
     4964    ENDIF 
     4965    IF( med_diag%FBDDTDIN%dgsave ) THEN 
     4966       CALL iom_put( "FBDDTDIN"  , fbddtdin   ) 
     4967       CALL wrk_dealloc( jpi, jpj, fbddtdin   ) 
     4968    ENDIF 
     4969    IF( med_diag%FBDDTDISI%dgsave ) THEN 
     4970       CALL iom_put( "FBDDTDISI" , fbddtdisi  ) 
     4971       CALL wrk_dealloc( jpi, jpj, fbddtdisi  ) 
     4972    ENDIF 
     4973    !! 
     4974    !! AXY (09/11/16): 3D CMIP6 diagnostics 
     4975    IF( med_diag%TPPD3%dgsave ) THEN 
     4976       CALL iom_put( "TPPD3"     , tppd3 ) 
     4977       CALL wrk_dealloc( jpi, jpj, jpk, tppd3      ) 
     4978    ENDIF 
     4979    IF( med_diag%BDDTALK3%dgsave ) THEN 
     4980       CALL iom_put( "BDDTALK3"  , bddtalk3 ) 
     4981       CALL wrk_dealloc( jpi, jpj, jpk, bddtalk3   ) 
     4982    ENDIF 
     4983    IF( med_diag%BDDTDIC3%dgsave ) THEN 
     4984       CALL iom_put( "BDDTDIC3"  , bddtdic3 ) 
     4985       CALL wrk_dealloc( jpi, jpj, jpk, bddtdic3   ) 
     4986    ENDIF 
     4987    IF( med_diag%BDDTDIFE3%dgsave ) THEN 
     4988       CALL iom_put( "BDDTDIFE3" , bddtdife3 ) 
     4989       CALL wrk_dealloc( jpi, jpj, jpk, bddtdife3  ) 
     4990    ENDIF 
     4991    IF( med_diag%BDDTDIN3%dgsave ) THEN 
     4992       CALL iom_put( "BDDTDIN3"  , bddtdin3 ) 
     4993       CALL wrk_dealloc( jpi, jpj, jpk, bddtdin3   ) 
     4994    ENDIF 
     4995    IF( med_diag%BDDTDISI3%dgsave ) THEN 
     4996       CALL iom_put( "BDDTDISI3" , bddtdisi3 ) 
     4997       CALL wrk_dealloc( jpi, jpj, jpk, bddtdisi3  ) 
     4998    ENDIF 
     4999    IF( med_diag%FD_NIT3%dgsave ) THEN 
     5000       CALL iom_put( "FD_NIT3"  , fd_nit3 ) 
     5001       CALL wrk_dealloc( jpi, jpj, jpk,   fd_nit3  ) 
     5002    ENDIF 
     5003    IF( med_diag%FD_SIL3%dgsave ) THEN 
     5004       CALL iom_put( "FD_SIL3"  , fd_sil3 ) 
     5005       CALL wrk_dealloc( jpi, jpj, jpk,   fd_sil3  ) 
     5006    ENDIF 
     5007    IF( med_diag%FD_CAL3%dgsave ) THEN 
     5008       CALL iom_put( "FD_CAL3"  , fd_cal3 ) 
     5009       CALL wrk_dealloc( jpi, jpj, jpk,   fd_cal3  ) 
     5010    ENDIF 
     5011    IF( med_diag%FD_CAR3%dgsave ) THEN 
     5012       CALL iom_put( "FD_CAR3"  , fd_car3 ) 
     5013       CALL wrk_dealloc( jpi, jpj, jpk,   fd_car3  ) 
     5014    ENDIF 
     5015    IF( med_diag%CO33%dgsave ) THEN 
     5016       CALL iom_put( "CO33"  , f3_co3 ) 
     5017    ENDIF 
     5018    IF( med_diag%CO3SATARAG3%dgsave ) THEN 
     5019       CALL iom_put( "CO3SATARAG3"  , f3_omarg ) 
     5020    ENDIF 
     5021    IF( med_diag%CO3SATCALC3%dgsave ) THEN 
     5022       CALL iom_put( "CO3SATCALC3"  , f3_omcal ) 
     5023    ENDIF 
     5024    IF( med_diag%EXPC3%dgsave ) THEN 
     5025       CALL iom_put( "EXPC3"  , expc3 ) 
     5026       CALL wrk_dealloc( jpi, jpj, jpk, expc3  ) 
     5027    ENDIF 
     5028    IF( med_diag%EXPN3%dgsave ) THEN 
     5029       CALL iom_put( "EXPN3"  , expn3 ) 
     5030       CALL wrk_dealloc( jpi, jpj, jpk, expn3  ) 
     5031    ENDIF 
     5032    IF( med_diag%DCALC3%dgsave ) THEN 
     5033       CALL iom_put( "DCALC3"  , dcalc3 ) 
     5034       CALL wrk_dealloc( jpi, jpj, jpk, dcalc3  ) 
     5035    ENDIF 
     5036    IF( med_diag%FEDISS3%dgsave ) THEN 
     5037       CALL iom_put( "FEDISS3"  , fediss3 ) 
     5038       CALL wrk_dealloc( jpi, jpj, jpk, fediss3  ) 
     5039    ENDIF 
     5040    IF( med_diag%FESCAV3%dgsave ) THEN 
     5041       CALL iom_put( "FESCAV3"  , fescav3 ) 
     5042       CALL wrk_dealloc( jpi, jpj, jpk, fescav3  ) 
     5043    ENDIF 
     5044    IF( med_diag%MIGRAZP3%dgsave ) THEN 
     5045       CALL iom_put( "MIGRAZP3"  , migrazp3 ) 
     5046       CALL wrk_dealloc( jpi, jpj, jpk, migrazp3  ) 
     5047    ENDIF 
     5048    IF( med_diag%MIGRAZD3%dgsave ) THEN 
     5049       CALL iom_put( "MIGRAZD3"  , migrazd3 ) 
     5050       CALL wrk_dealloc( jpi, jpj, jpk, migrazd3  ) 
     5051    ENDIF 
     5052    IF( med_diag%MEGRAZP3%dgsave ) THEN 
     5053       CALL iom_put( "MEGRAZP3"  , megrazp3 ) 
     5054       CALL wrk_dealloc( jpi, jpj, jpk, megrazp3  ) 
     5055    ENDIF 
     5056    IF( med_diag%MEGRAZD3%dgsave ) THEN 
     5057       CALL iom_put( "MEGRAZD3"  , megrazd3 ) 
     5058       CALL wrk_dealloc( jpi, jpj, jpk, megrazd3  ) 
     5059    ENDIF 
     5060    IF( med_diag%MEGRAZZ3%dgsave ) THEN 
     5061       CALL iom_put( "MEGRAZZ3"  , megrazz3 ) 
     5062       CALL wrk_dealloc( jpi, jpj, jpk, megrazz3  ) 
     5063    ENDIF 
     5064    IF( med_diag%O2SAT3%dgsave ) THEN 
     5065       CALL iom_put( "O2SAT3"  , o2sat3 ) 
     5066       CALL wrk_dealloc( jpi, jpj, jpk, o2sat3 ) 
     5067    ENDIF 
     5068    IF( med_diag%PBSI3%dgsave ) THEN 
     5069       CALL iom_put( "PBSI3"  , pbsi3 ) 
     5070       CALL wrk_dealloc( jpi, jpj, jpk, pbsi3  ) 
     5071    ENDIF 
     5072    IF( med_diag%PCAL3%dgsave ) THEN 
     5073       CALL iom_put( "PCAL3"  , pcal3 ) 
     5074       CALL wrk_dealloc( jpi, jpj, jpk, pcal3  ) 
     5075    ENDIF 
     5076    IF( med_diag%REMOC3%dgsave ) THEN 
     5077       CALL iom_put( "REMOC3"  , remoc3 ) 
     5078       CALL wrk_dealloc( jpi, jpj, jpk, remoc3 ) 
     5079    ENDIF 
     5080    IF( med_diag%PNLIMJ3%dgsave ) THEN 
     5081       CALL iom_put( "PNLIMJ3" , pnlimj3 ) 
     5082       CALL wrk_dealloc( jpi, jpj, jpk, pnlimj3  ) 
     5083    ENDIF 
     5084    IF( med_diag%PNLIMN3%dgsave ) THEN 
     5085       CALL iom_put( "PNLIMN3" , pnlimn3 ) 
     5086       CALL wrk_dealloc( jpi, jpj, jpk, pnlimn3  ) 
     5087    ENDIF 
     5088    IF( med_diag%PNLIMFE3%dgsave ) THEN 
     5089       CALL iom_put( "PNLIMFE3" , pnlimfe3 ) 
     5090       CALL wrk_dealloc( jpi, jpj, jpk, pnlimfe3 ) 
     5091    ENDIF 
     5092    IF( med_diag%PDLIMJ3%dgsave ) THEN 
     5093       CALL iom_put( "PDLIMJ3" , pdlimj3 ) 
     5094       CALL wrk_dealloc( jpi, jpj, jpk, pdlimj3  ) 
     5095    ENDIF 
     5096    IF( med_diag%PDLIMN3%dgsave ) THEN 
     5097       CALL iom_put( "PDLIMN3" , pdlimn3 ) 
     5098       CALL wrk_dealloc( jpi, jpj, jpk, pdlimn3  ) 
     5099    ENDIF 
     5100    IF( med_diag%PDLIMFE3%dgsave ) THEN 
     5101       CALL iom_put( "PDLIMFE3" , pdlimfe3 ) 
     5102       CALL wrk_dealloc( jpi, jpj, jpk, pdlimfe3 ) 
     5103    ENDIF 
     5104    IF( med_diag%PDLIMSI3%dgsave ) THEN 
     5105       CALL iom_put( "PDLIMSI3" , pdlimsi3 ) 
     5106       CALL wrk_dealloc( jpi, jpj, jpk, pdlimsi3 ) 
     5107    ENDIF 
     5108# endif          
     5109 
     5110    CALL wrk_dealloc( jpi, jpj,   zw2d   ) 
     5111 
     5112# if defined key_debug_medusa 
     5113    IF(lwp) WRITE(numout,*) ' MEDUSA exiting trc_bio_medusa at kt =', kt 
     5114    CALL flush(numout) 
    51825115# endif 
    5183       ENDIF  
    5184       !! 
    5185       if (ibenthic.eq.2) then 
    5186          !! The code below (in this if ... then ... endif loop) is 
    5187          !! effectively commented out because it does not work as  
    5188          !! anticipated; it can be deleted at a later date 
    5189          if (jorgben.eq.1) then 
    5190             za_sed_n(:,:)  = ( f_sbenin_n(:,:)  + f_fbenin_n(:,:)  - f_benout_n(:,:)  ) * rdt 
    5191             za_sed_fe(:,:) = ( f_sbenin_fe(:,:) + f_fbenin_fe(:,:) - f_benout_fe(:,:) ) * rdt 
    5192             za_sed_c(:,:)  = ( f_sbenin_c(:,:)  + f_fbenin_c(:,:)  - f_benout_c(:,:)  ) * rdt 
    5193          endif 
    5194          if (jinorgben.eq.1) then 
    5195             za_sed_si(:,:) = ( f_fbenin_si(:,:) - f_benout_si(:,:) ) * rdt 
    5196             za_sed_ca(:,:) = ( f_fbenin_ca(:,:) - f_benout_ca(:,:) ) * rdt 
    5197          endif 
    5198          !! 
    5199          !! Leap-frog scheme - only in explicit case, otherwise the time stepping 
    5200          !! is already being done in trczdf 
    5201          !! IF( l_trczdf_exp .AND. (ln_trcadv_cen2 .OR. ln_trcadv_tvd) ) THEN 
    5202          !!    zfact = 2. * rdttra(jk) * FLOAT( ndttrc ) 
    5203          !!    IF( neuler == 0 .AND. kt == nittrc000 )   zfact = rdttra(jk) * FLOAT(ndttrc) 
    5204          !!    if (jorgben.eq.1) then 
    5205          !!       za_sed_n(:,:)  = zb_sed_n(:,:)  + ( zfact * za_sed_n(:,:)  ) 
    5206          !!      za_sed_fe(:,:) = zb_sed_fe(:,:) + ( zfact * za_sed_fe(:,:) ) 
    5207          !!       za_sed_c(:,:)  = zb_sed_c(:,:)  + ( zfact * za_sed_c(:,:)  ) 
    5208          !!    endif 
    5209          !!    if (jinorgben.eq.1) then 
    5210          !!       za_sed_si(:,:) = zb_sed_si(:,:) + ( zfact * za_sed_si(:,:) ) 
    5211          !!       za_sed_ca(:,:) = zb_sed_ca(:,:) + ( zfact * za_sed_ca(:,:) ) 
    5212          !!    endif 
    5213          !! ENDIF 
    5214          !!  
    5215          !! Time filter and swap of arrays 
    5216          IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd  ) THEN ! centred or tvd scheme 
    5217             IF( neuler == 0 .AND. kt == nittrc000 ) THEN 
    5218                if (jorgben.eq.1) then 
    5219                   zb_sed_n(:,:)  = zn_sed_n(:,:) 
    5220                   zn_sed_n(:,:)  = za_sed_n(:,:) 
    5221                   za_sed_n(:,:)  = 0.0 
    5222                   !! 
    5223                   zb_sed_fe(:,:) = zn_sed_fe(:,:) 
    5224                   zn_sed_fe(:,:) = za_sed_fe(:,:) 
    5225                   za_sed_fe(:,:) = 0.0 
    5226                   !! 
    5227                   zb_sed_c(:,:)  = zn_sed_c(:,:) 
    5228                   zn_sed_c(:,:)  = za_sed_c(:,:) 
    5229                   za_sed_c(:,:)  = 0.0 
    5230                endif 
    5231                if (jinorgben.eq.1) then 
    5232                   zb_sed_si(:,:) = zn_sed_si(:,:) 
    5233                   zn_sed_si(:,:) = za_sed_si(:,:) 
    5234                   za_sed_si(:,:) = 0.0 
    5235                   !! 
    5236                   zb_sed_ca(:,:) = zn_sed_ca(:,:) 
    5237                   zn_sed_ca(:,:) = za_sed_ca(:,:) 
    5238                   za_sed_ca(:,:) = 0.0 
    5239                endif 
    5240             ELSE 
    5241                if (jorgben.eq.1) then 
    5242                   zb_sed_n(:,:)  = (atfp  * ( zb_sed_n(:,:)  + za_sed_n(:,:)  )) + (atfp1 * zn_sed_n(:,:) ) 
    5243                   zn_sed_n(:,:)  = za_sed_n(:,:) 
    5244                   za_sed_n(:,:)  = 0.0 
    5245                   !! 
    5246                   zb_sed_fe(:,:) = (atfp  * ( zb_sed_fe(:,:) + za_sed_fe(:,:) )) + (atfp1 * zn_sed_fe(:,:)) 
    5247                   zn_sed_fe(:,:) = za_sed_fe(:,:) 
    5248                   za_sed_fe(:,:) = 0.0 
    5249                   !! 
    5250                   zb_sed_c(:,:)  = (atfp  * ( zb_sed_c(:,:)  + za_sed_c(:,:)  )) + (atfp1 * zn_sed_c(:,:) ) 
    5251                   zn_sed_c(:,:)  = za_sed_c(:,:) 
    5252                   za_sed_c(:,:)  = 0.0 
    5253                endif 
    5254                if (jinorgben.eq.1) then 
    5255                   zb_sed_si(:,:) = (atfp  * ( zb_sed_si(:,:) + za_sed_si(:,:) )) + (atfp1 * zn_sed_si(:,:)) 
    5256                   zn_sed_si(:,:) = za_sed_si(:,:) 
    5257                   za_sed_si(:,:) = 0.0 
    5258                   !! 
    5259                   zb_sed_ca(:,:) = (atfp  * ( zb_sed_ca(:,:) + za_sed_ca(:,:) )) + (atfp1 * zn_sed_ca(:,:)) 
    5260                   zn_sed_ca(:,:) = za_sed_ca(:,:) 
    5261                   za_sed_ca(:,:) = 0.0 
    5262                endif 
    5263             ENDIF 
    5264          ELSE                   !  case of smolar scheme or muscl 
    5265             if (jorgben.eq.1) then 
    5266                zb_sed_n(:,:)  = za_sed_n(:,:) 
    5267                zn_sed_n(:,:)  = za_sed_n(:,:) 
    5268                za_sed_n(:,:)  = 0.0 
    5269                !! 
    5270                zb_sed_fe(:,:) = za_sed_fe(:,:) 
    5271                zn_sed_fe(:,:) = za_sed_fe(:,:) 
    5272                za_sed_fe(:,:) = 0.0 
    5273                !! 
    5274                zb_sed_c(:,:)  = za_sed_c(:,:) 
    5275                zn_sed_c(:,:)  = za_sed_c(:,:) 
    5276                za_sed_c(:,:)  = 0.0 
    5277             endif 
    5278             if (jinorgben.eq.1) then 
    5279                zb_sed_si(:,:) = za_sed_si(:,:) 
    5280                zn_sed_si(:,:) = za_sed_si(:,:) 
    5281                za_sed_si(:,:) = 0.0 
    5282                !! 
    5283                zb_sed_ca(:,:) = za_sed_ca(:,:) 
    5284                zn_sed_ca(:,:) = za_sed_ca(:,:) 
    5285                za_sed_ca(:,:) = 0.0 
    5286             endif 
    5287          ENDIF 
    5288       endif 
    5289        
    5290       IF( ln_diatrc ) THEN 
    5291          !!---------------------------------------------------------------------- 
    5292          !! Output several accumulated diagnostics 
    5293          !!   - biomass-average phytoplankton limitation terms 
    5294          !!   - integrated tendency terms 
    5295          !!---------------------------------------------------------------------- 
    5296          !!  
    5297          DO jj = 2,jpjm1 
    5298             DO ji = 2,jpim1 
    5299                !! non-diatom phytoplankton limitations 
    5300                trc2d(ji,jj,25)  = trc2d(ji,jj,25) / MAX(ftot_pn(ji,jj), rsmall) 
    5301                trc2d(ji,jj,26)  = trc2d(ji,jj,26) / MAX(ftot_pn(ji,jj), rsmall) 
    5302                trc2d(ji,jj,27)  = trc2d(ji,jj,27) / MAX(ftot_pn(ji,jj), rsmall) 
    5303                !! diatom phytoplankton limitations 
    5304                trc2d(ji,jj,28)  = trc2d(ji,jj,28) / MAX(ftot_pd(ji,jj), rsmall) 
    5305                trc2d(ji,jj,29)  = trc2d(ji,jj,29) / MAX(ftot_pd(ji,jj), rsmall) 
    5306                trc2d(ji,jj,30)  = trc2d(ji,jj,30) / MAX(ftot_pd(ji,jj), rsmall) 
    5307                trc2d(ji,jj,31)  = trc2d(ji,jj,31) / MAX(ftot_pd(ji,jj), rsmall) 
    5308                trc2d(ji,jj,32)  = trc2d(ji,jj,32) / MAX(ftot_pd(ji,jj), rsmall) 
    5309                !! tendency terms 
    5310                trc2d(ji,jj,76)  = fflx_n(ji,jj) 
    5311                trc2d(ji,jj,77)  = fflx_si(ji,jj) 
    5312                trc2d(ji,jj,78)  = fflx_fe(ji,jj) 
    5313                !! integrated biomass 
    5314                trc2d(ji,jj,79)  = ftot_pn(ji,jj)       !! integrated non-diatom phytoplankton 
    5315                trc2d(ji,jj,80)  = ftot_pd(ji,jj)       !! integrated diatom phytoplankton 
    5316                trc2d(ji,jj,217) = ftot_zmi(ji,jj)      !! Integrated microzooplankton 
    5317                trc2d(ji,jj,218) = ftot_zme(ji,jj)      !! Integrated mesozooplankton 
    5318                trc2d(ji,jj,219) = ftot_det(ji,jj)      !! Integrated slow detritus, nitrogen 
    5319                trc2d(ji,jj,220) = ftot_dtc(ji,jj)      !! Integrated slow detritus, carbon 
    5320 # if defined key_roam 
    5321                !! the balance of nitrogen production/consumption 
    5322                trc2d(ji,jj,111) = fnit_prod(ji,jj)  !! integrated nitrogen production 
    5323                trc2d(ji,jj,112) = fnit_cons(ji,jj)  !! integrated nitrogen consumption 
    5324                !! the balance of carbon production/consumption 
    5325                trc2d(ji,jj,113) = fcar_prod(ji,jj)  !! integrated carbon production 
    5326                trc2d(ji,jj,114) = fcar_cons(ji,jj)  !! integrated carbon consumption 
    5327                !! the balance of oxygen production/consumption 
    5328                trc2d(ji,jj,115) = foxy_prod(ji,jj)  !! integrated oxygen production 
    5329                trc2d(ji,jj,116) = foxy_cons(ji,jj)  !! integrated oxygen consumption 
    5330                trc2d(ji,jj,117) = foxy_anox(ji,jj)  !! integrated unrealised oxygen consumption 
    5331 # endif 
    5332             ENDDO 
    5333          ENDDO 
    5334           
    5335 # if defined key_roam 
    5336 #  if defined key_axy_nancheck 
    5337          !!---------------------------------------------------------------------- 
    5338          !! Check for NaNs in diagnostic outputs 
    5339          !!---------------------------------------------------------------------- 
    5340          !!  
    5341          !! 2D diagnostics 
    5342          DO jn = 1,150 
    5343             fq0 = SUM(trc2d(:,:,jn)) 
    5344             !! AXY (30/01/14): "isnan" problem on HECTOR 
    5345             !! if (fq0 /= fq0 ) then 
    5346             if ( ieee_is_nan( fq0 ) ) then 
    5347                !! there's a NaN here 
    5348                if (lwp) write(numout,*) 'NAN detected in 2D diagnostic field', jn, 'at time', kt, 'at position:' 
    5349                DO jj = 1,jpj 
    5350                   DO ji = 1,jpi 
    5351                      if ( ieee_is_nan( trc2d(ji,jj,jn) ) ) then 
    5352                         if (lwp) write (numout,'(a,3i6)') 'NAN-CHECK', & 
    5353                         &        ji, jj, jn 
    5354                      endif 
    5355                   ENDDO 
    5356                ENDDO 
    5357           CALL ctl_stop( 'trcbio_medusa, NAN in 2D diagnostic field' ) 
    5358             endif 
    5359          ENDDO 
    5360          !! 
    5361          !! 3D diagnostics 
    5362          DO jn = 1,5 
    5363             fq0 = SUM(trc3d(:,:,:,jn)) 
    5364             !! AXY (30/01/14): "isnan" problem on HECTOR 
    5365             !! if (fq0 /= fq0 ) then 
    5366             if ( ieee_is_nan( fq0 ) ) then 
    5367                !! there's a NaN here 
    5368                if (lwp) write(numout,*) 'NAN detected in 3D diagnostic field', jn, 'at time', kt, 'at position:' 
    5369                DO jk = 1,jpk 
    5370                   DO jj = 1,jpj 
    5371                      DO ji = 1,jpi 
    5372                         if ( ieee_is_nan( trc3d(ji,jj,jk,jn) ) ) then 
    5373                            if (lwp) write (numout,'(a,4i6)') 'NAN-CHECK', & 
    5374                            &        ji, jj, jk, jn 
    5375                         endif 
    5376                      ENDDO 
    5377                   ENDDO 
    5378                ENDDO 
    5379           CALL ctl_stop( 'trcbio_medusa, NAN in 3D diagnostic field' ) 
    5380             endif 
    5381          ENDDO 
    5382     CALL flush(numout) 
    5383 #  endif 
    5384 # endif 
    5385  
    5386          !!---------------------------------------------------------------------- 
    5387          !! Don't know what this does; belongs to someone else ... 
    5388          !!---------------------------------------------------------------------- 
    5389          !!  
    5390          !! Lateral boundary conditions on trc2d 
    5391          DO jn=1,jp_medusa_2d 
    5392              CALL lbc_lnk(trc2d(:,:,jn),'T',1. ) 
    5393          ENDDO  
    5394  
    5395          !! Lateral boundary conditions on trc3d 
    5396          DO jn=1,jp_medusa_3d 
    5397              CALL lbc_lnk(trc3d(:,:,1,jn),'T',1. ) 
    5398          ENDDO  
    5399  
    5400  
    5401 # if defined key_axy_nodiag 
    5402          !!---------------------------------------------------------------------- 
    5403          !! Blank diagnostics as a NaN-trap 
    5404          !!---------------------------------------------------------------------- 
    5405          !!  
    5406          !! blank 2D diagnostic array 
    5407          trc2d(:,:,:) = 0.e0 
    5408          !! 
    5409          !! blank 3D diagnostic array 
    5410          trc3d(:,:,:,:) = 0.e0 
    5411 # endif 
    5412  
    5413  
    5414          !!---------------------------------------------------------------------- 
    5415          !! Add in XML diagnostics stuff 
    5416          !!---------------------------------------------------------------------- 
    5417          !! 
    5418          !! ** 2D diagnostics 
    5419          DO jn=1,jp_medusa_2d 
    5420             CALL iom_put(TRIM(ctrc2d(jn)), trc2d(:,:,jn)) 
    5421          END DO 
    5422 !! AXY (17/02/14): don't think I need this if I modify the above for all diagnostics 
    5423 !! #  if defined key_roam 
    5424 !!          DO jn=91,jp_medusa_2d 
    5425 !!             CALL iom_put(TRIM(ctrc2d(jn)), trc2d(:,:,jn)) 
    5426 !!          END DO       
    5427 !! #  endif 
    5428          !! 
    5429          !! ** 3D diagnostics 
    5430          DO jn=1,jp_medusa_3d 
    5431             CALL iom_put(TRIM(ctrc3d(jn)), trc3d(:,:,:,jn)) 
    5432          END DO 
    5433 !! AXY (17/02/14): don't think I need this if I modify the above for all diagnostics 
    5434 !! #  if defined key_roam 
    5435 !!          CALL iom_put(TRIM(ctrc3d(5)), trc3d(:,:,:,5)) 
    5436 !! #  endif 
    5437  
    5438  
    5439       ELSE IF( lk_iomput .AND. .NOT. ln_diatrc ) THEN 
    5440          !!!---------------------------------------------------------------------- 
    5441          !! Add very last diag calculations  
    5442          !!!---------------------------------------------------------------------- 
    5443          DO jj = 2,jpjm1 
    5444             DO ji = 2,jpim1 
    5445                !!          
    5446                IF( med_diag%PN_JLIM%dgsave ) THEN 
    5447                   fjln2d(ji,jj) = fjln2d(ji,jj)   / MAX(ftot_pn(ji,jj), rsmall) 
    5448                ENDIF 
    5449                IF( med_diag%PN_NLIM%dgsave ) THEN 
    5450                   fnln2d(ji,jj) = fnln2d(ji,jj)   / MAX(ftot_pn(ji,jj), rsmall) 
    5451                ENDIF 
    5452                IF( med_diag%PN_FELIM%dgsave ) THEN 
    5453                   ffln2d(ji,jj) = ffln2d(ji,jj)   / MAX(ftot_pn(ji,jj), rsmall) 
    5454                ENDIF 
    5455                IF( med_diag%PD_JLIM%dgsave ) THEN 
    5456                   fjld2d(ji,jj) = fjld2d(ji,jj)   / MAX(ftot_pd(ji,jj), rsmall) 
    5457                ENDIF 
    5458                IF( med_diag%PD_NLIM%dgsave ) THEN 
    5459                   fnld2d(ji,jj) = fnld2d(ji,jj)   / MAX(ftot_pd(ji,jj), rsmall) 
    5460                ENDIF 
    5461                IF( med_diag%PD_FELIM%dgsave ) THEN 
    5462                   ffld2d(ji,jj) = ffld2d(ji,jj)   / MAX(ftot_pd(ji,jj), rsmall) 
    5463                ENDIF 
    5464                IF( med_diag%PD_SILIM%dgsave ) THEN 
    5465                   fsld2d2(ji,jj) = fsld2d2(ji,jj) / MAX(ftot_pd(ji,jj), rsmall) 
    5466                ENDIF 
    5467                IF( med_diag%PDSILIM2%dgsave ) THEN 
    5468                   fsld2d(ji,jj) = fsld2d(ji,jj)   / MAX(ftot_pd(ji,jj), rsmall) 
    5469                ENDIF 
    5470             ENDDO 
    5471          ENDDO 
    5472          !!---------------------------------------------------------------------- 
    5473          !! Add in XML diagnostics stuff 
    5474          !!---------------------------------------------------------------------- 
    5475          !! 
    5476          !! ** 2D diagnostics 
    5477 #   if defined key_debug_medusa 
    5478          IF (lwp) write (numout,*) 'trc_bio_medusa: export all diag.' 
    5479          CALL flush(numout) 
    5480 #   endif 
    5481          IF ( med_diag%INVTN%dgsave ) THEN 
    5482             CALL iom_put( "INVTN"  , ftot_n ) 
    5483          ENDIF 
    5484          IF ( med_diag%INVTSI%dgsave ) THEN 
    5485             CALL iom_put( "INVTSI"  , ftot_si ) 
    5486          ENDIF 
    5487          IF ( med_diag%INVTFE%dgsave ) THEN 
    5488             CALL iom_put( "INVTFE"  , ftot_fe ) 
    5489          ENDIF                            
    5490          IF ( med_diag%ML_PRN%dgsave ) THEN 
    5491             CALL iom_put( "ML_PRN"  , fprn_ml ) 
    5492          ENDIF 
    5493          IF ( med_diag%ML_PRD%dgsave ) THEN 
    5494             CALL iom_put( "ML_PRD"  , fprd_ml ) 
    5495          ENDIF 
    5496          IF ( med_diag%OCAL_LVL%dgsave ) THEN 
    5497             CALL iom_put( "OCAL_LVL"  , fccd ) 
    5498          ENDIF 
    5499          IF ( med_diag%PN_JLIM%dgsave ) THEN 
    5500             CALL iom_put( "PN_JLIM"  , fjln2d ) 
    5501             CALL wrk_dealloc( jpi, jpj,   fjln2d   ) 
    5502          ENDIF 
    5503          IF ( med_diag%PN_NLIM%dgsave ) THEN 
    5504             CALL iom_put( "PN_NLIM"  , fnln2d ) 
    5505             CALL wrk_dealloc( jpi, jpj,   fnln2d   ) 
    5506          ENDIF 
    5507          IF ( med_diag%PN_FELIM%dgsave ) THEN 
    5508             CALL iom_put( "PN_FELIM"  , ffln2d ) 
    5509             CALL wrk_dealloc( jpi, jpj,   ffln2d   ) 
    5510          ENDIF 
    5511          IF ( med_diag%PD_JLIM%dgsave ) THEN 
    5512             CALL iom_put( "PD_JLIM"  , fjld2d ) 
    5513             CALL wrk_dealloc( jpi, jpj,  fjld2d    ) 
    5514          ENDIF 
    5515          IF ( med_diag%PD_NLIM%dgsave ) THEN 
    5516             CALL iom_put( "PD_NLIM"  , fnld2d ) 
    5517             CALL wrk_dealloc( jpi, jpj,   fnld2d  ) 
    5518          ENDIF 
    5519          IF ( med_diag%PD_FELIM%dgsave ) THEN 
    5520             CALL iom_put( "PD_FELIM"  , ffld2d ) 
    5521             CALL wrk_dealloc( jpi, jpj,  ffld2d    ) 
    5522          ENDIF 
    5523          IF ( med_diag%PD_SILIM%dgsave ) THEN 
    5524             CALL iom_put( "PD_SILIM"  , fsld2d2 ) 
    5525             CALL wrk_dealloc( jpi, jpj,   fsld2d2   ) 
    5526          ENDIF 
    5527          IF ( med_diag%PDSILIM2%dgsave ) THEN 
    5528             CALL iom_put( "PDSILIM2"  , fsld2d ) 
    5529             CALL wrk_dealloc( jpi, jpj,   fsld2d   ) 
    5530          ENDIF 
    5531          IF ( med_diag%INTFLX_N%dgsave ) THEN 
    5532             CALL iom_put( "INTFLX_N"  , fflx_n ) 
    5533          ENDIF 
    5534          IF ( med_diag%INTFLX_SI%dgsave ) THEN 
    5535             CALL iom_put( "INTFLX_SI"  , fflx_si ) 
    5536          ENDIF 
    5537          IF ( med_diag%INTFLX_FE%dgsave ) THEN 
    5538             CALL iom_put( "INTFLX_FE"  , fflx_fe ) 
    5539          ENDIF         
    5540          IF ( med_diag%INT_PN%dgsave ) THEN 
    5541             CALL iom_put( "INT_PN"  , ftot_pn ) 
    5542          ENDIF 
    5543          IF ( med_diag%INT_PD%dgsave ) THEN 
    5544             CALL iom_put( "INT_PD"  , ftot_pd ) 
    5545          ENDIF          
    5546          IF ( med_diag%INT_ZMI%dgsave ) THEN 
    5547             CALL iom_put( "INT_ZMI"  , ftot_zmi ) 
    5548          ENDIF 
    5549          IF ( med_diag%INT_ZME%dgsave ) THEN 
    5550             CALL iom_put( "INT_ZME"  , ftot_zme ) 
    5551          ENDIF 
    5552          IF ( med_diag%INT_DET%dgsave ) THEN 
    5553             CALL iom_put( "INT_DET"  , ftot_det ) 
    5554          ENDIF 
    5555          IF ( med_diag%INT_DTC%dgsave ) THEN 
    5556             CALL iom_put( "INT_DTC"  , ftot_dtc ) 
    5557          ENDIF 
    5558          IF ( med_diag%BEN_N%dgsave ) THEN 
    5559             CALL iom_put( "BEN_N"  , za_sed_n ) 
    5560          ENDIF 
    5561          IF ( med_diag%BEN_FE%dgsave ) THEN 
    5562             CALL iom_put( "BEN_FE"  , za_sed_fe ) 
    5563          ENDIF 
    5564          IF ( med_diag%BEN_C%dgsave ) THEN 
    5565             CALL iom_put( "BEN_C"  , za_sed_c ) 
    5566          ENDIF 
    5567          IF ( med_diag%BEN_SI%dgsave ) THEN 
    5568             CALL iom_put( "BEN_SI"  , za_sed_si ) 
    5569          ENDIF 
    5570          IF ( med_diag%BEN_CA%dgsave ) THEN 
    5571             CALL iom_put( "BEN_CA"  , za_sed_ca ) 
    5572          ENDIF 
    5573          IF ( med_diag%RUNOFF%dgsave ) THEN 
    5574             CALL iom_put( "RUNOFF"  , f_runoff ) 
    5575          ENDIF  
    5576 # if defined key_roam         
    5577          IF ( med_diag%N_PROD%dgsave ) THEN 
    5578             CALL iom_put( "N_PROD"  , fnit_prod ) 
    5579          ENDIF 
    5580          IF ( med_diag%N_CONS%dgsave ) THEN 
    5581             CALL iom_put( "N_CONS"  , fnit_cons ) 
    5582          ENDIF 
    5583          IF ( med_diag%C_PROD%dgsave ) THEN 
    5584             CALL iom_put( "C_PROD"  , fcar_prod ) 
    5585          ENDIF 
    5586          IF ( med_diag%C_CONS%dgsave ) THEN 
    5587             CALL iom_put( "C_CONS"  , fcar_cons ) 
    5588          ENDIF 
    5589          IF ( med_diag%O2_PROD%dgsave ) THEN 
    5590             CALL iom_put( "O2_PROD"  , foxy_prod ) 
    5591          ENDIF 
    5592          IF ( med_diag%O2_CONS%dgsave ) THEN 
    5593             CALL iom_put( "O2_CONS"  , foxy_cons ) 
    5594          ENDIF 
    5595          IF ( med_diag%O2_ANOX%dgsave ) THEN 
    5596             CALL iom_put( "O2_ANOX"  , foxy_anox ) 
    5597          ENDIF 
    5598          IF ( med_diag%INVTC%dgsave ) THEN 
    5599             CALL iom_put( "INVTC"  , ftot_c ) 
    5600          ENDIF 
    5601          IF ( med_diag%INVTALK%dgsave ) THEN 
    5602             CALL iom_put( "INVTALK"  , ftot_a ) 
    5603          ENDIF 
    5604          IF ( med_diag%INVTO2%dgsave ) THEN 
    5605             CALL iom_put( "INVTO2"  , ftot_o2 ) 
    5606          ENDIF 
    5607          IF ( med_diag%COM_RESP%dgsave ) THEN 
    5608             CALL iom_put( "COM_RESP"  , fcomm_resp ) 
    5609          ENDIF          
    5610 # endif       
    5611          !! 
    5612          !! diagnostic filled in the i-j-k main loop 
    5613          !!-------------------------------------------- 
    5614          IF ( med_diag%PRN%dgsave ) THEN 
    5615             CALL iom_put( "PRN"  , fprn2d ) 
    5616             CALL wrk_dealloc( jpi, jpj,   fprn2d   ) 
    5617          ENDIF 
    5618          IF ( med_diag%MPN%dgsave ) THEN 
    5619             CALL iom_put( "MPN"  ,fdpn2d  ) 
    5620             CALL wrk_dealloc( jpi, jpj,    fdpn2d  ) 
    5621          ENDIF 
    5622          IF ( med_diag%PRD%dgsave ) THEN 
    5623             CALL iom_put( "PRD"  ,fprd2d  ) 
    5624             CALL wrk_dealloc( jpi, jpj,   fprd2d  ) 
    5625          ENDIF 
    5626          IF( med_diag%MPD%dgsave ) THEN 
    5627             CALL iom_put( "MPD"  , fdpd2d ) 
    5628             CALL wrk_dealloc( jpi, jpj,    fdpd2d ) 
    5629          ENDIF 
    5630          !  IF( med_diag%DSED%dgsave ) THEN 
    5631          !      CALL iom_put( "DSED"  , ftot_n ) 
    5632          !  ENDIF 
    5633          IF( med_diag%OPAL%dgsave ) THEN 
    5634             CALL iom_put( "OPAL"  , fprds2d ) 
    5635             CALL wrk_dealloc( jpi, jpj,   fprds2d  ) 
    5636          ENDIF 
    5637          IF( med_diag%OPALDISS%dgsave ) THEN 
    5638             CALL iom_put( "OPALDISS"  , fsdiss2d ) 
    5639             CALL wrk_dealloc( jpi, jpj,   fsdiss2d  ) 
    5640          ENDIF 
    5641          IF( med_diag%GMIPn%dgsave ) THEN 
    5642             CALL iom_put( "GMIPn"  , fgmipn2d ) 
    5643             CALL wrk_dealloc( jpi, jpj,   fgmipn2d  ) 
    5644          ENDIF 
    5645          IF( med_diag%GMID%dgsave ) THEN 
    5646             CALL iom_put( "GMID"  , fgmid2d ) 
    5647             CALL wrk_dealloc( jpi, jpj,  fgmid2d  ) 
    5648          ENDIF 
    5649          IF( med_diag%MZMI%dgsave ) THEN 
    5650             CALL iom_put( "MZMI"  , fdzmi2d ) 
    5651             CALL wrk_dealloc( jpi, jpj,   fdzmi2d   ) 
    5652          ENDIF 
    5653          IF( med_diag%GMEPN%dgsave ) THEN 
    5654             CALL iom_put( "GMEPN"  , fgmepn2d ) 
    5655             CALL wrk_dealloc( jpi, jpj,   fgmepn2d  ) 
    5656          ENDIF 
    5657          IF( med_diag%GMEPD%dgsave ) THEN 
    5658             CALL iom_put( "GMEPD"  , fgmepd2d ) 
    5659             CALL wrk_dealloc( jpi, jpj,   fgmepd2d   ) 
    5660          ENDIF 
    5661          IF( med_diag%GMEZMI%dgsave ) THEN 
    5662             CALL iom_put( "GMEZMI"  , fgmezmi2d ) 
    5663             CALL wrk_dealloc( jpi, jpj,   fgmezmi2d   ) 
    5664          ENDIF 
    5665          IF( med_diag%GMED%dgsave ) THEN 
    5666             CALL iom_put( "GMED"  , fgmed2d ) 
    5667             CALL wrk_dealloc( jpi, jpj,    fgmed2d  ) 
    5668          ENDIF 
    5669          IF( med_diag%MZME%dgsave ) THEN 
    5670             CALL iom_put( "MZME"  , fdzme2d ) 
    5671             CALL wrk_dealloc( jpi, jpj,  fdzme2d    ) 
    5672          ENDIF 
    5673          !  IF( med_diag%DEXP%dgsave ) THEN 
    5674          !      CALL iom_put( "DEXP"  , ftot_n ) 
    5675          !  ENDIF 
    5676          IF( med_diag%DETN%dgsave ) THEN 
    5677             CALL iom_put( "DETN"  , fslown2d ) 
    5678             CALL wrk_dealloc( jpi, jpj,  fslown2d    ) 
    5679          ENDIF 
    5680          IF( med_diag%MDET%dgsave ) THEN 
    5681             CALL iom_put( "MDET"  , fdd2d ) 
    5682             CALL wrk_dealloc( jpi, jpj,   fdd2d   ) 
    5683          ENDIF 
    5684          IF( med_diag%AEOLIAN%dgsave ) THEN 
    5685             CALL iom_put( "AEOLIAN"  , ffetop2d ) 
    5686             CALL wrk_dealloc( jpi, jpj,   ffetop2d   ) 
    5687          ENDIF 
    5688          IF( med_diag%BENTHIC%dgsave ) THEN 
    5689             CALL iom_put( "BENTHIC"  , ffebot2d ) 
    5690             CALL wrk_dealloc( jpi, jpj,   ffebot2d   ) 
    5691          ENDIF 
    5692          IF( med_diag%SCAVENGE%dgsave ) THEN 
    5693             CALL iom_put( "SCAVENGE"  , ffescav2d ) 
    5694             CALL wrk_dealloc( jpi, jpj,   ffescav2d  ) 
    5695          ENDIF 
    5696          !!  
    5697          IF( med_diag%TOTREG_N%dgsave ) THEN 
    5698             CALL iom_put( "TOTREG_N"  , fregen2d ) 
    5699             CALL wrk_dealloc( jpi, jpj,   fregen2d   ) 
    5700          ENDIF 
    5701          IF( med_diag%TOTRG_SI%dgsave ) THEN 
    5702             CALL iom_put( "TOTRG_SI"  , fregensi2d ) 
    5703             CALL wrk_dealloc( jpi, jpj,    fregensi2d  ) 
    5704          ENDIF 
    5705          !!  
    5706          IF( med_diag%FASTN%dgsave ) THEN 
    5707             CALL iom_put( "FASTN"  , ftempn2d ) 
    5708             CALL wrk_dealloc( jpi, jpj,   ftempn2d   ) 
    5709          ENDIF 
    5710          IF( med_diag%FASTSI%dgsave ) THEN 
    5711             CALL iom_put( "FASTSI"  , ftempsi2d ) 
    5712             CALL wrk_dealloc( jpi, jpj,   ftempsi2d   ) 
    5713          ENDIF 
    5714          IF( med_diag%FASTFE%dgsave ) THEN 
    5715             CALL iom_put( "FASTFE"  , ftempfe2d ) 
    5716             CALL wrk_dealloc( jpi, jpj,    ftempfe2d  ) 
    5717          ENDIF 
    5718          IF( med_diag%FASTC%dgsave ) THEN 
    5719             CALL iom_put( "FASTC"  , ftempc2d ) 
    5720             CALL wrk_dealloc( jpi, jpj,  ftempc2d    ) 
    5721          ENDIF 
    5722          IF( med_diag%FASTCA%dgsave ) THEN 
    5723             CALL iom_put( "FASTCA"  , ftempca2d ) 
    5724             CALL wrk_dealloc( jpi, jpj,  ftempca2d   ) 
    5725          ENDIF 
    5726          !!  
    5727          IF( med_diag%REMINN%dgsave ) THEN 
    5728             CALL iom_put( "REMINN"  , freminn2d ) 
    5729             CALL wrk_dealloc( jpi, jpj,   freminn2d   ) 
    5730          ENDIF 
    5731          IF( med_diag%REMINSI%dgsave ) THEN 
    5732             CALL iom_put( "REMINSI"  , freminsi2d ) 
    5733             CALL wrk_dealloc( jpi, jpj,   freminsi2d   ) 
    5734          ENDIF 
    5735          IF( med_diag%REMINFE%dgsave ) THEN 
    5736             CALL iom_put( "REMINFE"  , freminfe2d ) 
    5737             CALL wrk_dealloc( jpi, jpj,  freminfe2d    ) 
    5738          ENDIF 
    5739          IF( med_diag%REMINC%dgsave ) THEN 
    5740             CALL iom_put( "REMINC"  , freminc2d ) 
    5741             CALL wrk_dealloc( jpi, jpj,    freminc2d  ) 
    5742          ENDIF 
    5743          IF( med_diag%REMINCA%dgsave ) THEN 
    5744             CALL iom_put( "REMINCA"  , freminca2d ) 
    5745             CALL wrk_dealloc( jpi, jpj,   freminca2d  ) 
    5746          ENDIF 
    5747          IF( med_diag%SEAFLRN%dgsave ) THEN 
    5748             CALL iom_put( "SEAFLRN"  , fsedn ) 
    5749          ENDIF 
    5750          IF( med_diag%SEAFLRSI%dgsave ) THEN 
    5751             CALL iom_put( "SEAFLRSI"  , fsedsi ) 
    5752          ENDIF 
    5753          IF( med_diag%SEAFLRFE%dgsave ) THEN 
    5754             CALL iom_put( "SEAFLRFE"  , fsedfe ) 
    5755          ENDIF 
    5756          IF( med_diag%SEAFLRC%dgsave ) THEN 
    5757             CALL iom_put( "SEAFLRC"  , fsedc ) 
    5758          ENDIF 
    5759          IF( med_diag%SEAFLRCA%dgsave ) THEN 
    5760             CALL iom_put( "SEAFLRCA"  , fsedca ) 
    5761          ENDIF 
    5762          !! 
    5763 # if defined key_roam             
    5764          !! 
    5765          IF( med_diag%RIV_N%dgsave ) THEN 
    5766             CALL iom_put( "RIV_N"  , rivn2d ) 
    5767             CALL wrk_dealloc( jpi, jpj,    rivn2d  ) 
    5768          ENDIF 
    5769          IF( med_diag%RIV_SI%dgsave ) THEN 
    5770             CALL iom_put( "RIV_SI"  , rivsi2d ) 
    5771             CALL wrk_dealloc( jpi, jpj,   rivsi2d   ) 
    5772          ENDIF 
    5773          IF( med_diag%RIV_C%dgsave ) THEN 
    5774             CALL iom_put( "RIV_C"  , rivc2d ) 
    5775             CALL wrk_dealloc( jpi, jpj,    rivc2d  ) 
    5776          ENDIF 
    5777          IF( med_diag%RIV_ALK%dgsave ) THEN 
    5778             CALL iom_put( "RIV_ALK"  , rivalk2d ) 
    5779             CALL wrk_dealloc( jpi, jpj,  rivalk2d    ) 
    5780          ENDIF 
    5781          IF( med_diag%DETC%dgsave ) THEN 
    5782             CALL iom_put( "DETC"  , fslowc2d ) 
    5783             CALL wrk_dealloc( jpi, jpj,   fslowc2d   ) 
    5784          ENDIF 
    5785          !! 
    5786          IF( med_diag%PN_LLOSS%dgsave ) THEN 
    5787             CALL iom_put( "PN_LLOSS"  , fdpn22d ) 
    5788             CALL wrk_dealloc( jpi, jpj,   fdpn22d   ) 
    5789          ENDIF 
    5790          IF( med_diag%PD_LLOSS%dgsave ) THEN 
    5791             CALL iom_put( "PD_LLOSS"  , fdpd22d ) 
    5792             CALL wrk_dealloc( jpi, jpj,   fdpd22d   ) 
    5793          ENDIF 
    5794          IF( med_diag%ZI_LLOSS%dgsave ) THEN 
    5795             CALL iom_put( "ZI_LLOSS"  , fdzmi22d ) 
    5796              CALL wrk_dealloc( jpi, jpj,    fdzmi22d  ) 
    5797           ENDIF 
    5798           IF( med_diag%ZE_LLOSS%dgsave ) THEN 
    5799              CALL iom_put( "ZE_LLOSS"  , fdzme22d ) 
    5800              CALL wrk_dealloc( jpi, jpj,   fdzme22d   ) 
    5801           ENDIF 
    5802           IF( med_diag%ZI_MES_N%dgsave ) THEN 
    5803              CALL iom_put( "ZI_MES_N"  , zimesn2d ) 
    5804              CALL wrk_dealloc( jpi, jpj,    zimesn2d  ) 
    5805           ENDIF 
    5806           IF( med_diag%ZI_MES_D%dgsave ) THEN 
    5807              CALL iom_put( "ZI_MES_D"  , zimesd2d ) 
    5808              CALL wrk_dealloc( jpi, jpj,    zimesd2d  ) 
    5809           ENDIF 
    5810           IF( med_diag%ZI_MES_C%dgsave ) THEN 
    5811              CALL iom_put( "ZI_MES_C"  , zimesc2d ) 
    5812              CALL wrk_dealloc( jpi, jpj,    zimesc2d  ) 
    5813           ENDIF 
    5814           IF( med_diag%ZI_MESDC%dgsave ) THEN 
    5815              CALL iom_put( "ZI_MESDC"  ,zimesdc2d  ) 
    5816              CALL wrk_dealloc( jpi, jpj,    zimesdc2d  ) 
    5817           ENDIF 
    5818           IF( med_diag%ZI_EXCR%dgsave ) THEN 
    5819              CALL iom_put( "ZI_EXCR"  , ziexcr2d ) 
    5820              CALL wrk_dealloc( jpi, jpj,    ziexcr2d ) 
    5821           ENDIF 
    5822           IF( med_diag%ZI_RESP%dgsave ) THEN 
    5823              CALL iom_put( "ZI_RESP"  , ziresp2d ) 
    5824              CALL wrk_dealloc( jpi, jpj,   ziresp2d   ) 
    5825           ENDIF 
    5826           IF( med_diag%ZI_GROW%dgsave ) THEN 
    5827              CALL iom_put( "ZI_GROW"  , zigrow2d ) 
    5828              CALL wrk_dealloc( jpi, jpj,   zigrow2d   ) 
    5829           ENDIF 
    5830           IF( med_diag%ZE_MES_N%dgsave ) THEN 
    5831              CALL iom_put( "ZE_MES_N"  , zemesn2d ) 
    5832              CALL wrk_dealloc( jpi, jpj,    zemesn2d  ) 
    5833           ENDIF 
    5834           IF( med_diag%ZE_MES_D%dgsave ) THEN 
    5835              CALL iom_put( "ZE_MES_D"  , zemesd2d ) 
    5836              CALL wrk_dealloc( jpi, jpj,    zemesd2d  ) 
    5837           ENDIF 
    5838           IF( med_diag%ZE_MES_C%dgsave ) THEN 
    5839              CALL iom_put( "ZE_MES_C"  , zemesc2d ) 
    5840              CALL wrk_dealloc( jpi, jpj,   zemesc2d   ) 
    5841           ENDIF 
    5842           IF( med_diag%ZE_MESDC%dgsave ) THEN 
    5843              CALL iom_put( "ZE_MESDC"  , zemesdc2d ) 
    5844              CALL wrk_dealloc( jpi, jpj,   zemesdc2d   ) 
    5845           ENDIF 
    5846           IF( med_diag%ZE_EXCR%dgsave ) THEN 
    5847              CALL iom_put( "ZE_EXCR"  , zeexcr2d ) 
    5848              CALL wrk_dealloc( jpi, jpj,   zeexcr2d   ) 
    5849           ENDIF 
    5850           IF( med_diag%ZE_RESP%dgsave ) THEN 
    5851              CALL iom_put( "ZE_RESP"  , zeresp2d ) 
    5852              CALL wrk_dealloc( jpi, jpj,    zeresp2d  ) 
    5853           ENDIF 
    5854           IF( med_diag%ZE_GROW%dgsave ) THEN 
    5855              CALL iom_put( "ZE_GROW"  , zegrow2d ) 
    5856              CALL wrk_dealloc( jpi, jpj,   zegrow2d   ) 
    5857           ENDIF 
    5858           IF( med_diag%MDETC%dgsave ) THEN 
    5859              CALL iom_put( "MDETC"  , mdetc2d ) 
    5860              CALL wrk_dealloc( jpi, jpj,   mdetc2d   ) 
    5861           ENDIF 
    5862           IF( med_diag%GMIDC%dgsave ) THEN 
    5863              CALL iom_put( "GMIDC"  , gmidc2d ) 
    5864              CALL wrk_dealloc( jpi, jpj,    gmidc2d  ) 
    5865           ENDIF 
    5866           IF( med_diag%GMEDC%dgsave ) THEN 
    5867              CALL iom_put( "GMEDC"  , gmedc2d ) 
    5868              CALL wrk_dealloc( jpi, jpj,    gmedc2d  ) 
    5869           ENDIF 
    5870           IF( med_diag%IBEN_N%dgsave ) THEN 
    5871              CALL iom_put( "IBEN_N"  , iben_n2d ) 
    5872              CALL wrk_dealloc( jpi, jpj,    iben_n2d  ) 
    5873           ENDIF 
    5874           IF( med_diag%IBEN_FE%dgsave ) THEN 
    5875              CALL iom_put( "IBEN_FE"  , iben_fe2d ) 
    5876              CALL wrk_dealloc( jpi, jpj,   iben_fe2d   ) 
    5877           ENDIF 
    5878           IF( med_diag%IBEN_C%dgsave ) THEN 
    5879              CALL iom_put( "IBEN_C"  , iben_c2d ) 
    5880              CALL wrk_dealloc( jpi, jpj,   iben_c2d   ) 
    5881           ENDIF 
    5882           IF( med_diag%IBEN_SI%dgsave ) THEN 
    5883              CALL iom_put( "IBEN_SI"  , iben_si2d ) 
    5884              CALL wrk_dealloc( jpi, jpj,   iben_si2d   ) 
    5885           ENDIF 
    5886           IF( med_diag%IBEN_CA%dgsave ) THEN 
    5887              CALL iom_put( "IBEN_CA"  , iben_ca2d ) 
    5888              CALL wrk_dealloc( jpi, jpj,   iben_ca2d   ) 
    5889           ENDIF 
    5890           IF( med_diag%OBEN_N%dgsave ) THEN 
    5891              CALL iom_put( "OBEN_N"  , oben_n2d ) 
    5892              CALL wrk_dealloc( jpi, jpj,    oben_n2d  ) 
    5893           ENDIF 
    5894           IF( med_diag%OBEN_FE%dgsave ) THEN 
    5895              CALL iom_put( "OBEN_FE"  , oben_fe2d ) 
    5896              CALL wrk_dealloc( jpi, jpj,    oben_fe2d  ) 
    5897           ENDIF 
    5898           IF( med_diag%OBEN_C%dgsave ) THEN 
    5899              CALL iom_put( "OBEN_C"  , oben_c2d ) 
    5900              CALL wrk_dealloc( jpi, jpj,    oben_c2d  ) 
    5901           ENDIF 
    5902           IF( med_diag%OBEN_SI%dgsave ) THEN 
    5903              CALL iom_put( "OBEN_SI"  , oben_si2d ) 
    5904              CALL wrk_dealloc( jpi, jpj,    oben_si2d  ) 
    5905           ENDIF 
    5906           IF( med_diag%OBEN_CA%dgsave ) THEN 
    5907              CALL iom_put( "OBEN_CA"  , oben_ca2d ) 
    5908              CALL wrk_dealloc( jpi, jpj, oben_ca2d     ) 
    5909           ENDIF 
    5910           IF( med_diag%SFR_OCAL%dgsave ) THEN 
    5911              CALL iom_put( "SFR_OCAL"  , sfr_ocal2d ) 
    5912              CALL wrk_dealloc( jpi, jpj,    sfr_ocal2d  ) 
    5913           ENDIF 
    5914           IF( med_diag%SFR_OARG%dgsave ) THEN 
    5915              CALL iom_put( "SFR_OARG"  , sfr_oarg2d ) 
    5916              CALL wrk_dealloc( jpi, jpj,    sfr_oarg2d  ) 
    5917           ENDIF 
    5918           IF( med_diag%LYSO_CA%dgsave ) THEN 
    5919              CALL iom_put( "LYSO_CA"  , lyso_ca2d ) 
    5920              CALL wrk_dealloc( jpi, jpj,    lyso_ca2d  ) 
    5921           ENDIF 
    5922 # endif                    
    5923           !! 
    5924           !! ** 3D diagnostics 
    5925           IF( med_diag%TPP3%dgsave ) THEN 
    5926              CALL iom_put( "TPP3"  , tpp3d ) 
    5927              CALL wrk_dealloc( jpi, jpj, jpk,   tpp3d  ) 
    5928           ENDIF 
    5929           IF( med_diag%DETFLUX3%dgsave ) THEN 
    5930              CALL iom_put( "DETFLUX3"  , detflux3d ) 
    5931              CALL wrk_dealloc( jpi, jpj, jpk,    detflux3d ) 
    5932           ENDIF 
    5933           IF( med_diag%REMIN3N%dgsave ) THEN 
    5934              CALL iom_put( "REMIN3N"  , remin3dn ) 
    5935              CALL wrk_dealloc( jpi, jpj, jpk,   remin3dn  ) 
    5936           ENDIF 
    5937 # if defined key_roam           
    5938           IF( med_diag%PH3%dgsave ) THEN 
    5939              CALL iom_put( "PH3"  , f3_pH ) 
    5940           ENDIF 
    5941           IF( med_diag%OM_CAL3%dgsave ) THEN 
    5942              CALL iom_put( "OM_CAL3"  , f3_omcal ) 
    5943           ENDIF 
    5944           !! 
    5945           !! AXY (09/11/16): 2D CMIP6 diagnostics 
    5946           IF( med_diag%INTDISSIC%dgsave ) THEN 
    5947              CALL iom_put( "INTDISSIC"  , intdissic ) 
    5948              CALL wrk_dealloc( jpi, jpj, intdissic   ) 
    5949           ENDIF           
    5950           IF( med_diag%INTDISSIN%dgsave ) THEN 
    5951              CALL iom_put( "INTDISSIN"  , intdissin ) 
    5952              CALL wrk_dealloc( jpi, jpj, intdissin   ) 
    5953           ENDIF           
    5954           IF( med_diag%INTDISSISI%dgsave ) THEN 
    5955              CALL iom_put( "INTDISSISI"  , intdissisi ) 
    5956              CALL wrk_dealloc( jpi, jpj, intdissisi  ) 
    5957           ENDIF           
    5958           IF( med_diag%INTTALK%dgsave ) THEN 
    5959              CALL iom_put( "INTTALK"  , inttalk ) 
    5960              CALL wrk_dealloc( jpi, jpj, inttalk     ) 
    5961           ENDIF           
    5962           IF( med_diag%O2min%dgsave ) THEN 
    5963              CALL iom_put( "O2min"  , o2min ) 
    5964              CALL wrk_dealloc( jpi, jpj, o2min       ) 
    5965           ENDIF           
    5966           IF( med_diag%ZO2min%dgsave ) THEN 
    5967              CALL iom_put( "ZO2min"  , zo2min ) 
    5968              CALL wrk_dealloc( jpi, jpj, zo2min      ) 
    5969           ENDIF           
    5970           IF( med_diag%FBDDTALK%dgsave ) THEN 
    5971              CALL iom_put( "FBDDTALK"  , fbddtalk   ) 
    5972              CALL wrk_dealloc( jpi, jpj, fbddtalk   ) 
    5973           ENDIF           
    5974           IF( med_diag%FBDDTDIC%dgsave ) THEN 
    5975              CALL iom_put( "FBDDTDIC"  , fbddtdic   ) 
    5976              CALL wrk_dealloc( jpi, jpj, fbddtdic   ) 
    5977           ENDIF           
    5978           IF( med_diag%FBDDTDIFE%dgsave ) THEN 
    5979              CALL iom_put( "FBDDTDIFE" , fbddtdife  ) 
    5980              CALL wrk_dealloc( jpi, jpj, fbddtdife  ) 
    5981           ENDIF           
    5982           IF( med_diag%FBDDTDIN%dgsave ) THEN 
    5983              CALL iom_put( "FBDDTDIN"  , fbddtdin   ) 
    5984              CALL wrk_dealloc( jpi, jpj, fbddtdin   ) 
    5985           ENDIF           
    5986           IF( med_diag%FBDDTDISI%dgsave ) THEN 
    5987              CALL iom_put( "FBDDTDISI" , fbddtdisi  ) 
    5988              CALL wrk_dealloc( jpi, jpj, fbddtdisi  ) 
    5989           ENDIF     
    5990           !! 
    5991           !! AXY (09/11/16): 3D CMIP6 diagnostics 
    5992           IF( med_diag%TPPD3%dgsave ) THEN 
    5993              CALL iom_put( "TPPD3"     , tppd3 ) 
    5994              CALL wrk_dealloc( jpi, jpj, jpk, tppd3      ) 
    5995           ENDIF           
    5996           IF( med_diag%BDDTALK3%dgsave ) THEN 
    5997              CALL iom_put( "BDDTALK3"  , bddtalk3 ) 
    5998              CALL wrk_dealloc( jpi, jpj, jpk, bddtalk3   ) 
    5999           ENDIF           
    6000           IF( med_diag%BDDTDIC3%dgsave ) THEN 
    6001              CALL iom_put( "BDDTDIC3"  , bddtdic3 ) 
    6002              CALL wrk_dealloc( jpi, jpj, jpk, bddtdic3   ) 
    6003           ENDIF           
    6004           IF( med_diag%BDDTDIFE3%dgsave ) THEN 
    6005              CALL iom_put( "BDDTDIFE3" , bddtdife3 ) 
    6006              CALL wrk_dealloc( jpi, jpj, jpk, bddtdife3  ) 
    6007           ENDIF           
    6008           IF( med_diag%BDDTDIN3%dgsave ) THEN 
    6009              CALL iom_put( "BDDTDIN3"  , bddtdin3 ) 
    6010              CALL wrk_dealloc( jpi, jpj, jpk, bddtdin3   ) 
    6011           ENDIF           
    6012           IF( med_diag%BDDTDISI3%dgsave ) THEN 
    6013              CALL iom_put( "BDDTDISI3" , bddtdisi3 ) 
    6014              CALL wrk_dealloc( jpi, jpj, jpk, bddtdisi3  ) 
    6015           ENDIF     
    6016           IF( med_diag%FD_NIT3%dgsave ) THEN 
    6017              CALL iom_put( "FD_NIT3"  , fd_nit3 ) 
    6018              CALL wrk_dealloc( jpi, jpj, jpk,   fd_nit3  ) 
    6019           ENDIF 
    6020           IF( med_diag%FD_SIL3%dgsave ) THEN 
    6021              CALL iom_put( "FD_SIL3"  , fd_sil3 ) 
    6022              CALL wrk_dealloc( jpi, jpj, jpk,   fd_sil3  ) 
    6023           ENDIF 
    6024           IF( med_diag%FD_CAL3%dgsave ) THEN 
    6025              CALL iom_put( "FD_CAL3"  , fd_cal3 ) 
    6026              CALL wrk_dealloc( jpi, jpj, jpk,   fd_cal3  ) 
    6027           ENDIF 
    6028           IF( med_diag%FD_CAR3%dgsave ) THEN 
    6029              CALL iom_put( "FD_CAR3"  , fd_car3 ) 
    6030              CALL wrk_dealloc( jpi, jpj, jpk,   fd_car3  ) 
    6031           ENDIF 
    6032           IF( med_diag%CO33%dgsave ) THEN 
    6033              CALL iom_put( "CO33"  , f3_co3 ) 
    6034           ENDIF                     
    6035           IF( med_diag%CO3SATARAG3%dgsave ) THEN 
    6036              CALL iom_put( "CO3SATARAG3"  , f3_omarg ) 
    6037           ENDIF                     
    6038           IF( med_diag%CO3SATCALC3%dgsave ) THEN 
    6039              CALL iom_put( "CO3SATCALC3"  , f3_omcal ) 
    6040           ENDIF                     
    6041           IF( med_diag%EXPC3%dgsave ) THEN 
    6042              CALL iom_put( "EXPC3"  , expc3 ) 
    6043              CALL wrk_dealloc( jpi, jpj, jpk, expc3  ) 
    6044           ENDIF                     
    6045           IF( med_diag%EXPN3%dgsave ) THEN 
    6046              CALL iom_put( "EXPN3"  , expn3 ) 
    6047              CALL wrk_dealloc( jpi, jpj, jpk, expn3  ) 
    6048           ENDIF                     
    6049           IF( med_diag%DCALC3%dgsave ) THEN 
    6050              CALL iom_put( "DCALC3"  , dcalc3 ) 
    6051              CALL wrk_dealloc( jpi, jpj, jpk, dcalc3  ) 
    6052           ENDIF                     
    6053           IF( med_diag%FEDISS3%dgsave ) THEN 
    6054              CALL iom_put( "FEDISS3"  , fediss3 ) 
    6055              CALL wrk_dealloc( jpi, jpj, jpk, fediss3  ) 
    6056           ENDIF                     
    6057           IF( med_diag%FESCAV3%dgsave ) THEN 
    6058              CALL iom_put( "FESCAV3"  , fescav3 ) 
    6059              CALL wrk_dealloc( jpi, jpj, jpk, fescav3  ) 
    6060           ENDIF                     
    6061           IF( med_diag%MIGRAZP3%dgsave ) THEN 
    6062              CALL iom_put( "MIGRAZP3"  , migrazp3 ) 
    6063              CALL wrk_dealloc( jpi, jpj, jpk, migrazp3  ) 
    6064           ENDIF                     
    6065           IF( med_diag%MIGRAZD3%dgsave ) THEN 
    6066              CALL iom_put( "MIGRAZD3"  , migrazd3 ) 
    6067              CALL wrk_dealloc( jpi, jpj, jpk, migrazd3  ) 
    6068           ENDIF                     
    6069           IF( med_diag%MEGRAZP3%dgsave ) THEN 
    6070              CALL iom_put( "MEGRAZP3"  , megrazp3 ) 
    6071              CALL wrk_dealloc( jpi, jpj, jpk, megrazp3  ) 
    6072           ENDIF                     
    6073           IF( med_diag%MEGRAZD3%dgsave ) THEN 
    6074              CALL iom_put( "MEGRAZD3"  , megrazd3 ) 
    6075              CALL wrk_dealloc( jpi, jpj, jpk, megrazd3  ) 
    6076           ENDIF                     
    6077           IF( med_diag%MEGRAZZ3%dgsave ) THEN 
    6078              CALL iom_put( "MEGRAZZ3"  , megrazz3 ) 
    6079              CALL wrk_dealloc( jpi, jpj, jpk, megrazz3  ) 
    6080           ENDIF                     
    6081           IF( med_diag%O2SAT3%dgsave ) THEN 
    6082              CALL iom_put( "O2SAT3"  , o2sat3 ) 
    6083              CALL wrk_dealloc( jpi, jpj, jpk, o2sat3 ) 
    6084           ENDIF                     
    6085           IF( med_diag%PBSI3%dgsave ) THEN 
    6086              CALL iom_put( "PBSI3"  , pbsi3 ) 
    6087              CALL wrk_dealloc( jpi, jpj, jpk, pbsi3  ) 
    6088           ENDIF                     
    6089           IF( med_diag%PCAL3%dgsave ) THEN 
    6090              CALL iom_put( "PCAL3"  , pcal3 ) 
    6091              CALL wrk_dealloc( jpi, jpj, jpk, pcal3  ) 
    6092           ENDIF                     
    6093           IF( med_diag%REMOC3%dgsave ) THEN 
    6094              CALL iom_put( "REMOC3"  , remoc3 ) 
    6095              CALL wrk_dealloc( jpi, jpj, jpk, remoc3 ) 
    6096           ENDIF                     
    6097           IF( med_diag%PNLIMJ3%dgsave ) THEN 
    6098              CALL iom_put( "PNLIMJ3" , pnlimj3 ) 
    6099              CALL wrk_dealloc( jpi, jpj, jpk, pnlimj3  ) 
    6100           ENDIF                     
    6101           IF( med_diag%PNLIMN3%dgsave ) THEN 
    6102              CALL iom_put( "PNLIMN3" , pnlimn3 ) 
    6103              CALL wrk_dealloc( jpi, jpj, jpk, pnlimn3  ) 
    6104           ENDIF                     
    6105           IF( med_diag%PNLIMFE3%dgsave ) THEN 
    6106              CALL iom_put( "PNLIMFE3" , pnlimfe3 ) 
    6107              CALL wrk_dealloc( jpi, jpj, jpk, pnlimfe3 ) 
    6108           ENDIF                     
    6109           IF( med_diag%PDLIMJ3%dgsave ) THEN 
    6110              CALL iom_put( "PDLIMJ3" , pdlimj3 ) 
    6111              CALL wrk_dealloc( jpi, jpj, jpk, pdlimj3  ) 
    6112           ENDIF                     
    6113           IF( med_diag%PDLIMN3%dgsave ) THEN 
    6114              CALL iom_put( "PDLIMN3" , pdlimn3 ) 
    6115              CALL wrk_dealloc( jpi, jpj, jpk, pdlimn3  ) 
    6116           ENDIF                     
    6117           IF( med_diag%PDLIMFE3%dgsave ) THEN 
    6118              CALL iom_put( "PDLIMFE3" , pdlimfe3 ) 
    6119              CALL wrk_dealloc( jpi, jpj, jpk, pdlimfe3 ) 
    6120           ENDIF                     
    6121           IF( med_diag%PDLIMSI3%dgsave ) THEN 
    6122              CALL iom_put( "PDLIMSI3" , pdlimsi3 ) 
    6123              CALL wrk_dealloc( jpi, jpj, jpk, pdlimsi3 ) 
    6124           ENDIF                     
    6125            
    6126 # endif          
    6127  
    6128           CALL wrk_dealloc( jpi, jpj,   zw2d   ) 
    6129  
    6130        ENDIF                    ! end of ln_diatrc option 
    6131  
    6132 # if defined key_trc_diabio 
    6133        !! Lateral boundary conditions on trcbio 
    6134        DO jn=1,jp_medusa_trd 
    6135           CALL lbc_lnk(trbio(:,:,1,jn),'T',1. ) 
    6136        ENDDO  
    6137 # endif 
    6138  
    6139 # if defined key_debug_medusa 
    6140        IF(lwp) WRITE(numout,*) ' MEDUSA exiting trc_bio_medusa at kt =', kt 
    6141        CALL flush(numout) 
    6142 # endif 
    6143  
    6144    END SUBROUTINE trc_bio_medusa 
     5116 
     5117  END SUBROUTINE trc_bio_medusa 
    61455118 
    61465119#else 
  • branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcdms_medusa.F90

    r7766 r7894  
    3838!======================================================================= 
    3939! 
    40    SUBROUTINE trc_dms_medusa( chn, chd, mld, xqsr, xdin,   &  !! inputs 
     40   SUBROUTINE trc_dms_medusa( chn, chd, mld, xqsr, xlim,   &  !! inputs 
    4141     &  dms_andr, dms_simo, dms_aran, dms_hall )              !! outputs 
    4242!       
     
    7575      !!                 to the atmosphere in trc_bio_medusa 
    7676      !! 
     77      !! AXY (28/03/17): replace DIN input with DIN limitation input 
     78      !!                 to resolve issue with fixed DIN uptake half- 
     79      !!                 saturation; trc_bio_medusa has corresponding 
     80      !!                 change to calculate DIN limitation term 
     81      !! 
    7782!======================================================================= 
    7883 
     
    8388      REAL(wp), INTENT( in )    :: mld                  !! mix layer depth           (m) 
    8489      REAL(wp), INTENT( in )    :: xqsr                 !! surface irradiance        (W/m2) 
    85       REAL(wp), INTENT( in )    :: xdin                 !! surface DIN               (mmol N/m3) 
     90      REAL(wp), INTENT( in )    :: xlim                 !! surface DIN limitation    (mmol N/m3) 
    8691      REAL(wp), INTENT( inout ) :: dms_andr             !! DMS surface concentration (nmol/L)  
    8792      REAL(wp), INTENT( inout ) :: dms_simo             !! DMS surface concentration (nmol/L)  
     
    109114        !! done properly; perhaps even scaled with the proportion 
    110115        !! of diatoms and non-diatoms) 
    111         Qterm = xdin / (xdin + 0.5) 
     116        !! Qterm = xdin / (xdin + 0.5) 
     117   !! AXY (28/03/17): replace DIN with DIN limitation 
     118        Qterm = xlim 
    112119        fq1 = log10(CHL * Jterm * Qterm) 
    113120        if (fq1 > 1.72) then 
  • branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcnam_medusa.F90

    r7766 r7894  
    1212   !!              -   !  2015-11  (J. Palmieri) added iom_use for diags 
    1313   !!              -   !  2016-11  (A. Yool) updated diags for CMIP6 
     14   !!              -   !  2017-03  (A. Yool) minor tidy 
    1415   !!---------------------------------------------------------------------- 
    1516#if defined key_medusa 
     
    6768      ! 
    6869      NAMELIST/natbio/ xxi,xaln,xald,jphy,xvpn,xvpd,          & 
    69       &    xsin0,xnsi0,xuif,jliebig, jq10,                    & 
     70      &    xsin0,xnsi0,xuif,jliebig, xq10,                    & 
    7071      &    xthetam,xthetamd,xnln,xnld,xsld,xfln,xfld,         & 
    7172      &  xgmi,xgme,xkmi,xkme,xphi,xbetan,xbetac,xkc,          & 
     
    136137# endif 
    137138 
    138      IF( ( .NOT.lk_iomput .AND. ln_diatrc ) .OR. ( ln_diatrc .AND. lk_medusa ) ) THEN 
     139      !! AXY (06/04/17): can this next section be deleted? I think it can 
     140      IF( ( .NOT.lk_iomput .AND. ln_diatrc ) .OR. ( ln_diatrc .AND. lk_medusa ) ) THEN 
    139141         ! 
    140142         ! Namelist nammeddia 
     
    221223      ! ------------------------------------------- 
    222224       
    223       xxi         = 0. 
    224       xaln        = 0. 
    225       xald        = 0. 
    226       jphy        = 0 
    227       xvpn        = 0. 
    228       xvpd        = 0. 
    229       xthetam     = 0. 
    230       xthetamd    = 0. 
    231 !! 
    232       xsin0       = 0. 
    233       xnsi0       = 0. 
    234       xuif        = 0. 
    235 !! 
    236       jliebig     = 0 
    237       jq10        = 0. 
    238       xnln        = 0. 
    239       xnld        = 0. 
    240       xsld        = 0. 
    241       xfln        = 0. 
    242       xfld        = 0. 
    243 !! 
    244       xgmi        = 0. 
    245       xgme        = 0. 
    246       xkmi        = 0. 
    247       xkme        = 0. 
    248       xphi    = 0. 
    249       xbetan      = 0. 
    250       xbetac      = 0. 
    251       xkc         = 0. 
    252       xpmipn      = 0. 
    253       xpmid       = 0. 
    254       xpmepn      = 0. 
    255       xpmepd      = 0. 
    256       xpmezmi     = 0. 
    257       xpmed       = 0. 
    258 !! 
    259       xmetapn     = 0. 
    260       xmetapd     = 0. 
    261       xmetazmi    = 0. 
    262       xmetazme    = 0. 
    263 !! 
    264       jmpn        = 0 
    265       xmpn        = 0. 
    266       xkphn       = 0. 
    267       jmpd        = 0 
    268       xmpd        = 0. 
    269       xkphd       = 0. 
    270       jmzmi       = 0 
    271       xmzmi       = 0. 
    272       xkzmi       = 0. 
    273       jmzme       = 0 
    274       xmzme       = 0. 
    275       xkzme       = 0. 
    276 !! 
    277       jmd         = 0 
    278       jsfd        = 0 
    279       xmd         = 0. 
    280       xmdc        = 0. 
    281 !! 
    282       xthetapn    = 0. 
    283       xthetapd    = 0. 
    284       xthetazmi   = 0. 
    285       xthetazme   = 0. 
    286       xthetad     = 0. 
    287       xrfn        = 0. 
    288       xrsn        = 0.  !: (NOT USED HERE; RETAINED FOR LOBSTER) 
    289 !! 
    290       jiron       = 0 
    291       xfe_mass    = 0. 
    292       xfe_sol     = 0. 
    293       xfe_sed     = 0. 
    294       xLgT        = 0. 
    295       xk_FeL     = 0. 
    296       xk_sc_Fe    = 0. 
    297 !! 
    298       jexport     = 0 
    299       jfdfate     = 0 
    300       jrratio     = 0 
    301       jocalccd    = 0 
    302       xridg_r0    = 0. 
    303       xfdfrac1   = 0. 
    304       xfdfrac2   = 0. 
    305       xfdfrac3   = 0. 
    306       xcaco3a    = 0. 
    307       xcaco3b    = 0. 
    308       xmassc     = 0. 
    309       xmassca    = 0. 
    310       xmasssi    = 0. 
    311       xprotca    = 0. 
    312       xprotsi    = 0. 
    313       xfastc     = 0. 
    314       xfastca    = 0. 
    315       xfastsi    = 0. 
    316 !! 
    317       jorgben     = 0 
    318       jinorgben   = 0 
    319       xsedn       = 0. 
    320       xsedfe      = 0. 
    321       xsedsi      = 0. 
    322       xsedc       = 0. 
    323       xsedca      = 0. 
    324       xburial     = 0. 
    325 !! 
    326       jriver_n    = 0 
    327       jriver_si   = 0 
    328       jriver_c    = 0 
    329       jriver_alk  = 0 
    330       jriver_dep  = 1 
    331 !! 
    332       xsdiss     = 0. 
    333 !! 
    334       vsed        = 0. 
    335       xhr         = 0. 
    336 !! 
    337       sedlam     = 0. 
    338       sedlostpoc  = 0. 
    339       jpkb    = 0. 
    340       jdms        = 0 
    341       jdms_input  = 0 
    342       jdms_model  = 0 
     225!! Primary production and chl related quantities 
     226      xxi         = 0.  !! conversion factor from gC to mmolN 
     227      xaln        = 0.  !! Chl-a specific initial slope of P-I curve for non-diatoms 
     228      xald        = 0.  !! Chl-a specific initial slope of P-I curve for diatoms 
     229      jphy        = 0   !! phytoplankton T-dependent growth switch 
     230      xvpn        = 0.  !! maximum growth rate for non-diatoms 
     231      xvpd        = 0.  !! maximum growth rate for diatoms 
     232      xthetam     = 0.  !! maximum Chl to C ratio for non-diatoms 
     233      xthetamd    = 0.  !! maximum Chl to C ratio for diatoms 
     234!! 
     235!! Diatom silicon parameters 
     236      xsin0       = 0.  !! minimum diatom Si:N ratio 
     237      xnsi0       = 0.  !! minimum diatom N:Si ratio 
     238      xuif        = 0.  !! hypothetical growth ratio at infinite Si:N ratio 
     239!! 
     240!! Nutrient limitation 
     241      jliebig     = 0   !! Liebig nutrient uptake switch 
     242      xq10        = 0.  !! specific Q10 value (if jphy = 2)  
     243      xnln        = 0.  !! half-sat constant for DIN uptake by non-diatoms 
     244      xnld        = 0.  !! half-sat constant for DIN uptake by diatoms 
     245      xsld        = 0.  !! half-sat constant for  Si uptake by diatoms 
     246      xfln        = 0.  !! half-sat constant for  Fe uptake by non-datoms 
     247      xfld        = 0.  !! half-sat constant for  Fe uptake by diatoms 
     248!! 
     249!! Grazing 
     250      xgmi        = 0.  !! microzoo maximum growth rate 
     251      xgme        = 0.  !! mesozoo maximum growth rate 
     252      xkmi        = 0.  !! microzoo grazing half-sat parameter 
     253      xkme        = 0.  !! mesozoo grazing half-sat parameter 
     254      xphi    = 0.  !! micro/mesozoo grazing inefficiency 
     255      xbetan      = 0.  !! micro/mesozoo N assimilation efficiency 
     256      xbetac      = 0.  !! micro/mesozoo C assimilation efficiency 
     257      xkc         = 0.  !! micro/mesozoo net C growth efficiency 
     258      xpmipn      = 0.  !! grazing preference of microzoo for non-diatoms 
     259      xpmid       = 0.  !! grazing preference of microzoo for diatoms 
     260      xpmepn      = 0.  !! grazing preference of mesozoo for non-diatoms 
     261      xpmepd      = 0.  !! grazing preference of mesozoo for diatoms 
     262      xpmezmi     = 0.  !! grazing preference of mesozoo for microzoo 
     263      xpmed       = 0.  !! grazing preference of mesozoo for detritus 
     264!! 
     265!! Metabolic losses 
     266      xmetapn     = 0.  !! non-diatom metabolic loss rate 
     267      xmetapd     = 0.  !! diatom     metabolic loss rate 
     268      xmetazmi    = 0.  !! microzoo   metabolic loss rate 
     269      xmetazme    = 0.  !! mesozoo    metabolic loss rate 
     270!! 
     271!! Mortality/Remineralisation 
     272      jmpn        = 0   !! non-diatom mortality functional form 
     273      xmpn        = 0.  !! non-diatom mortality rate 
     274      xkphn       = 0.  !! non-diatom mortality half-sat constant 
     275      jmpd        = 0   !! diatom     mortality functional form 
     276      xmpd        = 0.  !! diatom     mortality rate 
     277      xkphd       = 0.  !! diatom     mortality half-sat constant 
     278      jmzmi       = 0   !! microzoo   mortality functional form 
     279      xmzmi       = 0.  !! microzoo   mortality rate 
     280      xkzmi       = 0.  !! microzoo   mortality half-sat constant 
     281      jmzme       = 0   !! mesozoo    mortality functional form 
     282      xmzme       = 0.  !! mesozoo    mortality rate 
     283      xkzme       = 0.  !! mesozoo    mortality half-sat constant 
     284!! 
     285!! Remineralisation 
     286      jmd         = 0   !! detritus T-dependent remineralisation switch 
     287      jsfd        = 0   !! accelerate seafloor detritus remin. switch 
     288      xmd         = 0.  !! detrital nitrogen remineralisation rate 
     289      xmdc        = 0.  !! detrital carbon remineralisation rate 
     290!! 
     291!! Stochiometric ratios 
     292      xthetapn    = 0.  !! non-diatom C:N ratio 
     293      xthetapd    = 0.  !! diatom     C:N ratio 
     294      xthetazmi   = 0.  !! microzoo   C:N ratio 
     295      xthetazme   = 0.  !! mesozoo    C:N ratio 
     296      xthetad     = 0.  !! detritus   C:N ratio (MEDUSA-1 only) 
     297      xrfn        = 0.  !! phytoplankton Fe:N ratio 
     298      xrsn        = 0.  !! diatom Si:N ratio (NOT USED HERE; LOBSTER ARTIFACT) 
     299!! 
     300!! Iron parameters 
     301      jiron       = 0   !! iron scavenging submodel switch 
     302      xfe_mass    = 0.  !! iron atomic mass 
     303      xfe_sol     = 0.  !! aeolian iron solubility 
     304      xfe_sed     = 0.  !! sediment iron input 
     305      xLgT        = 0.  !! total ligand concentration (umol/m3) 
     306      xk_FeL     = 0.  !! dissociation constant for (Fe + L) 
     307      xk_sc_Fe    = 0.  !! scavenging rate of "free" iron 
     308!! 
     309!! Fast-sinking detritus parameters 
     310      jexport     = 0   !! fast detritus remineralisation switch 
     311      jfdfate     = 0   !! fate of fast detritus at seafloor switch 
     312      jrratio     = 0   !! rain ratio switch 
     313      jocalccd    = 0   !! CCD switch 
     314      xridg_r0    = 0.  !! Ridgwell rain ratio coefficient 
     315      xfdfrac1   = 0.  !! fast-sinking fraction of diatom nat. mort. losses 
     316      xfdfrac2   = 0.  !! fast-sinking fraction of meszooplankton mort. losses 
     317      xfdfrac3   = 0.  !! fast-sinking fraction of diatom silicon grazing losses 
     318      xcaco3a    = 0.  !! polar (high latitude) CaCO3 fraction 
     319      xcaco3b    = 0.  !! equatorial (low latitude) CaCO3 fraction 
     320      xmassc     = 0.  !! organic C mass:mole ratio, C106 H175 O40 N16 P1 
     321      xmassca    = 0.  !! calcium carbonate mass:mole ratio, CaCO3 
     322      xmasssi    = 0.  !! biogenic silicon mass:mole ratio, (H2SiO3)n 
     323      xprotca    = 0.  !! calcium carbonate protection ratio 
     324      xprotsi    = 0.  !! biogenic silicon protection ratio 
     325      xfastc     = 0.  !! organic C remineralisation length scale 
     326      xfastca    = 0.  !! calcium carbonate dissolution length scale 
     327      xfastsi    = 0.  !! biogenic silicon dissolution length scale 
     328!! 
     329!! Benthic 
     330      jorgben     = 0   !! does   organic detritus go to the benthos? 
     331      jinorgben   = 0   !! does inorganic detritus go to the benthos? 
     332      xsedn       = 0.  !! organic   nitrogen sediment remineralisation rate 
     333      xsedfe      = 0.  !! organic   iron     sediment remineralisation rate 
     334      xsedsi      = 0.  !! inorganic silicon  sediment dissolution      rate 
     335      xsedc       = 0.  !! organic   carbon   sediment remineralisation rate 
     336      xsedca      = 0.  !! inorganic carbon   sediment dissolution      rate 
     337      xburial     = 0.  !! burial rate of seafloor detritus 
     338!! 
     339!! Riverine inputs 
     340      jriver_n    = 0   !! riverine N          input? 
     341      jriver_si   = 0   !! riverine Si         input? 
     342      jriver_c    = 0   !! riverine C          input? 
     343      jriver_alk  = 0   !! riverine alkalinity input? 
     344      jriver_dep  = 1   !! depth of riverine   input? 
     345!! 
     346!! Miscellaneous 
     347      xsdiss     = 0.  !! diatom frustule dissolution rate 
     348!! 
     349!! Gravitational sinking 
     350      vsed        = 0.  !! detritus gravitational sinking rate 
     351      xhr         = 0.  !! coeff for Martin's remineralisation profile (LOBSTER) 
     352!! 
     353!! Additional parameters 
     354      sedlam     = 0.  !! time coeff of POC in sediments (LOBSTER) 
     355      sedlostpoc  = 0.  !! sediment geol loss for POC (LOBSTER) 
     356      jpkb    = 0.  !! vertical layer for diagnostic of the vertical flux (LOBSTER) 
     357!! 
     358!! UKESM1 - new DMS parameters  !! Jpalm 
     359      jdms        = 0   !! include dms diagnostics 
     360      jdms_input  = 0   !! use instant (0) or diel-avg (1) inputs 
     361      jdms_model  = 0   !! choice of DMS model passed to atmosphere 
     362                        !! 1 = ANDR, 2 = SIMO, 3 = ARAN, 4 = HALL 
    343363             
    344364      !REWIND(numnatm) 
    345365      !READ(numnatm,natbio) 
    346          ! Namelist natbio 
    347          ! ------------------- 
    348          REWIND( numnatp_ref )              ! Namelist natbio in reference namelist : MEDUSA diagnostics 
    349          READ  ( numnatp_ref, natbio, IOSTAT = ios, ERR = 903) 
    350 903      IF( ios /= 0 ) CALL ctl_nam ( ios , 'natbio in reference namelist', lwp ) 
    351  
    352          REWIND( numnatp_cfg )              ! Namelist natbio in configuration namelist : MEDUSA diagnostics 
    353          READ  ( numnatp_cfg, natbio, IOSTAT = ios, ERR = 904 ) 
    354 904      IF( ios /= 0 ) CALL ctl_nam ( ios , 'natbio in configuration namelist', lwp ) 
    355          IF(lwm) WRITE ( numonp, natbio ) 
    356  
    357 !! Primary production and chl related quantities 
    358 !!       xxi         :  conversion factor from gC to mmolN  
    359 !!       xaln        :  Chl-a specific initial slope of P-I curve for non-diatoms  
    360 !!       xald        :  Chl-a specific initial slope of P-I curve for diatoms 
    361 !!       jphy        :  phytoplankton T-dependent growth switch 
    362 !!       xvpn        :  maximum growth rate for non-diatoms 
    363 !!       xvpd        :  maximum growth rate for diatoms 
    364 !!       xthetam     :  maximum Chl to C ratio for non-diatoms       
    365 !!       xthetamd    :  maximum Chl to C ratio for diatoms       
    366 !! 
    367 !! Diatom silicon parameters 
    368 !!       xsin0       :  minimum diatom Si:N ratio 
    369 !!       xnsi0       :  minimum diatom N:Si ratio 
    370 !!       xuif        :  hypothetical growth ratio at infinite Si:N ratio 
    371 !! 
    372 !! Nutrient limitation 
    373 !!       jliebig     :  Liebig nutrient uptake switch 
    374 !!       xnln        :  half-sat constant for DIN uptake by non-diatoms  
    375 !!       xnld        :  half-sat constant for DIN uptake by diatoms  
    376 !!       xsl         :  half-sat constant for Si uptake by diatoms  
    377 !!       xfld        :  half-sat constant for Fe uptake by diatoms   
    378 !!       xfln        :  half-sat constant for Fe uptake by non-datoms  
    379 !! 
    380 !! Grazing 
    381 !!       xgmi        :  microzoo maximum growth rate  
    382 !!       xgme        :  mesozoo maximum growth rate  
    383 !!       xkmi        :  microzoo grazing half-sat parameter 
    384 !!       xkme        :  mesozoo grazing half-sat parameter 
    385 !!       xphi        :  micro/mesozoo grazing inefficiency 
    386 !!       xbetan      :  micro/mesozoo N assimilation efficiency 
    387 !!       xbetac      :  micro/mesozoo C assimilation efficiency 
    388 !!       xkc         :  micro/mesozoo net C growth efficiency 
    389 !!       xpmipn      :  grazing preference of microzoo for non-diatoms 
    390 !!       xpmid       :  grazing preference of microzoo for diatoms 
    391 !!       xpmepn      :  grazing preference of mesozoo for non-diatoms  
    392 !!       xpmepd      :  grazing preference of mesozoo for diatoms 
    393 !!       xpmezmi     :  grazing preference of mesozoo for microzoo 
    394 !!       xpmed       :  grazing preference of mesozoo for detritus 
    395 !! 
    396 !! Metabolic losses 
    397 !!       xmetapn     :  non-diatom metabolic loss rate 
    398 !!       xmetapd     :  diatom     metabolic loss rate 
    399 !!       xmetazmi    :  microzoo   metabolic loss rate 
    400 !!       xmetazme    :  mesozoo    metabolic loss rate 
    401 !! 
    402 !! Mortality/Remineralisation 
    403 !!       jmpn        :  non-diatom mortality functional form 
    404 !!       xmpn        :  non-diatom mortality rate 
    405 !!       xkphn       :  non-diatom mortality half-sat constant 
    406 !!       jmpd        :  diatom     mortality functional form 
    407 !!       xmpd        :  diatom mortality rate 
    408 !!       xkphd       :  diatom mortality half-sat constant 
    409 !!       jmzmi       :  microzoo   mortality functional form 
    410 !!       xmzmi       :  microzoo mortality rate 
    411 !!       xkzmi       :  microzoo mortality half-sat constant 
    412 !!       jmzme       :  mesozoo    mortality functional form 
    413 !!       xmzme       :  mesozoo mortality rate 
    414 !!       xkzme       :  mesozoo mortality half-sat constant 
    415 !! 
    416 !! Remineralisation 
    417 !!       jmd         :  detritus T-dependent remineralisation switch 
    418 !!       jsfd        :  accelerate seafloor detritus remin. switch 
    419 !!       xmd         :  detrital nitrogen remineralisation rate  
    420 !!       xmdc        :  detrital carbon remineralisation rate  
    421 !! 
    422 !! Stochiometric ratios 
    423 !!       xthetapn    :  non-diatom C:N ratio 
    424 !!       xthetapd    :  diatom C:N ratio 
    425 !!       xthetazmi   :  microzoo C:N ratio 
    426 !!       xthetazme   :  mesozoo C:N ratio 
    427 !!       xthetad     :  detritus C:N ratio 
    428 !!       xrfn        :  phytoplankton Fe:N ratio 
    429 !!  xrsn        :  diatom Si:N ratio (*NOT* used) 
    430 !! 
    431 !! Iron parameters 
    432 !!       jiron       :  iron scavenging submodel switch 
    433 !!       xfe_mass    :  iron atomic mass 
    434 !!  xfe_sol     :  aeolian iron solubility 
    435 !!  xfe_sed     :  sediment iron input 
    436 !!  xLgT      :  total ligand concentration (umol/m3) 
    437 !!  xk_FeL       :  dissociation constant for (Fe + L) 
    438 !!  xk_sc_Fe    :  scavenging rate of "free" iron 
    439 !!   
    440 !! Fast-sinking detritus parameters 
    441 !!       jexport     :  fast detritus remineralisation switch 
    442 !!       jfdfate     :  fate of fast detritus at seafloor switch 
    443 !!       jrratio     :  rain ratio switch 
    444 !!       jocalccd    :  CCD switch 
    445 !!       xridg_r0    :  Ridgwell rain ratio coefficient 
    446 !!       xfdfrac1    :  fast-sinking fraction of diatom nat. mort. losses 
    447 !!       xfdfrac2    :  fast-sinking fraction of meszooplankton mort. losses 
    448 !!       xfdfrac3    :  fast-sinking fraction of diatom silicon grazing losses 
    449 !!       xcaco3a     :  polar (high latitude) CaCO3 fraction 
    450 !!       xcaco3b     :  equatorial (low latitude) CaCO3 fraction 
    451 !!       xmassc      :  organic C mass:mole ratio, C106 H175 O40 N16 P1 
    452 !!       xmassca     :  calcium carbonate mass:mole ratio, CaCO3 
    453 !!       xmasssi     :  biogenic silicon mass:mole ratio, (H2SiO3)n 
    454 !!       xprotca     :  calcium carbonate protection ratio 
    455 !!       xprotsi     :  biogenic silicon protection ratio 
    456 !!       xfastc      :  organic C remineralisation length scale 
    457 !!       xfastca     :  calcium carbonate dissolution length scale 
    458 !!       xfastsi     :  biogenic silicon dissolution length scale 
    459 !! 
    460 !! Benthic  
    461 !!       jorgben     :  does   organic detritus go to the benthos? 
    462 !!       jinorgben   :  does inorganic detritus go to the benthos? 
    463 !!       xsedn       :  organic   nitrogen sediment remineralisation rate  
    464 !!       xsedfe      :  organic   iron     sediment remineralisation rate  
    465 !!       xsedsi      :  inorganic silicon  sediment dissolution      rate  
    466 !!       xsedc       :  organic   carbon   sediment remineralisation rate  
    467 !!       xsedca      :  inorganic carbon   sediment dissolution      rate  
    468 !!       xburial     :  burial rate of seafloor detritus 
    469 !! 
    470 !! Riverine inputs 
    471 !!       jriver_n    :  riverine N          input? 
    472 !!       jriver_si   :  riverine Si         input? 
    473 !!       jriver_c    :  riverine C          input? 
    474 !!       jriver_alk  :  riverine alkalinity input? 
    475 !!       jriver_dep  :  depth of riverine   input? 
    476 !! 
    477 !! Miscellaneous 
    478 !!       xsdiss      :  diatom frustule dissolution rate 
    479 !! 
    480 !! Gravitational sinking       
    481 !!       vsed        :  detritus gravitational sinking rate  
    482 !!       xhr         :  coeff for Martin's remineralisation profile 
    483 !! 
    484 !! Additional parameters 
    485 !!       sedlam      :  time coeff of POC in sediments 
    486 !!      sedlostpoc   :  sediment geol loss for POC 
    487 !!       jpkb        :  vertical layer for diagnostic of the vertical flux  
    488 !!                      NOTE that in LOBSTER it is a first vertical layers where  
    489 !!                      biology is active   
    490 !! 
    491 !! UKESM1 - new diagnostics  !! Jpalm 
    492 !!       jdms        :  include dms diagnostics 
    493 !!  jdms_input  :  use instant (0) or diel-avg (1) inputs 
    494 !!       jdms_model  :  choice of DMS model passed to atmosphere 
    495 !!                      1 = ANDR, 2 = SIMO, 3 = ARAN, 4 = HALL 
    496 !! 
     366      ! Namelist natbio 
     367      ! ------------------- 
     368      REWIND( numnatp_ref )     ! Namelist natbio in reference namelist : MEDUSA diagnostics 
     369      READ  ( numnatp_ref, natbio, IOSTAT = ios, ERR = 903) 
     370 903  IF( ios /= 0 ) CALL ctl_nam ( ios , 'natbio in reference namelist', lwp ) 
     371 
     372      REWIND( numnatp_cfg )     ! Namelist natbio in configuration namelist : MEDUSA diagnostics 
     373      READ  ( numnatp_cfg, natbio, IOSTAT = ios, ERR = 904 ) 
     374 904  IF( ios /= 0 ) CALL ctl_nam ( ios , 'natbio in configuration namelist', lwp ) 
     375      IF(lwm) WRITE ( numonp, natbio ) 
     376 
    497377      IF(lwp) THEN 
    498 !! 
     378 
    499379!! AXY (08/11/13): compilation key notification 
    500380         WRITE(numout,*) '=== Compilation keys' 
     
    512392         WRITE(numout,*)     & 
    513393         &   ' key_axy_carbchem                                                       = INACTIVE' 
    514 #endif         
    515 #if defined key_mocsy 
    516          WRITE(numout,*)     & 
    517          &   ' key_mocsy                                                              = ACTIVE' 
    518 #else 
    519          WRITE(numout,*)     & 
    520          &   ' key_mocsy                                                              = INACTIVE' 
    521394#endif         
    522395#if defined key_avgqsr_medusa 
     
    601474         &   ' maximum Chl to C ratio for diatoms,                        xthetamd    = ', xthetamd 
    602475         WRITE(numout,*)     & 
    603          &   ' specific Q10 value (jphy==2),                                  jq10    = ', jq10 
     476         &   ' specific Q10 value (jphy==2),                                  xq10    = ', xq10 
    604477!! 
    605478!! Diatom silicon parameters 
     
    791664            WRITE(numout,*)     & 
    792665            &   ' Dutkiewicz et al. (2005) iron scavenging                   jiron       = ', jiron 
    793          elseif (jiron.eq.2) then 
    794             WRITE(numout,*)     & 
    795             &   ' Moore et al. (2004) iron scavenging                        jiron       = ', jiron 
    796          elseif (jiron.eq.3) then 
    797             WRITE(numout,*)     & 
    798             &   ' Moore et al. (2008) iron scavenging                        jiron       = ', jiron 
    799          elseif (jiron.eq.4) then 
    800             WRITE(numout,*)     & 
    801             &   ' Galbraith et al. (2010) iron scavenging                    jiron       = ', jiron 
    802666         else 
    803667            WRITE(numout,*)     & 
     
    1004868!! 
    1005869!! UKESM1 - new diagnostics  !! Jpalm; AXY (08/07/15) 
    1006          WRITE(numout,*) '=== UKESM1-related parameters' 
     870         WRITE(numout,*) '=== UKESM1 DMS parameters' 
    1007871         WRITE(numout,*)     & 
    1008872         &   ' include DMS diagnostic?,                                   jdms        = ', jdms 
     
    1084948 
    1085949      !READ(numnatm,natroam) 
    1086          ! Namelist natroam 
    1087          ! ------------------- 
    1088          REWIND( numnatp_ref )              ! Namelist natroam in reference namelist : MEDUSA diagnostics 
    1089          READ  ( numnatp_ref, natroam, IOSTAT = ios, ERR = 905) 
    1090 905      IF( ios /= 0 ) CALL ctl_nam ( ios , 'natroam in reference namelist', lwp ) 
    1091  
    1092          REWIND( numnatp_cfg )              ! Namelist natroam in configuration namelist : MEDUSA diagnostics 
    1093          READ  ( numnatp_cfg, natroam, IOSTAT = ios, ERR = 906 ) 
    1094 906      IF( ios /= 0 ) CALL ctl_nam ( ios , 'natroam in configuration namelist', lwp ) 
    1095          IF(lwm) WRITE ( numonp, natroam ) 
     950      ! Namelist natroam 
     951      ! ------------------- 
     952      REWIND( numnatp_ref )     ! Namelist natroam in reference namelist : MEDUSA diagnostics 
     953      READ  ( numnatp_ref, natroam, IOSTAT = ios, ERR = 905) 
     954 905  IF( ios /= 0 ) CALL ctl_nam ( ios , 'natroam in reference namelist', lwp ) 
     955 
     956      REWIND( numnatp_cfg )     ! Namelist natroam in configuration namelist : MEDUSA diagnostics 
     957      READ  ( numnatp_cfg, natroam, IOSTAT = ios, ERR = 906 ) 
     958 906  IF( ios /= 0 ) CALL ctl_nam ( ios , 'natroam in configuration namelist', lwp ) 
     959      IF(lwm) WRITE ( numonp, natroam ) 
    1096960 
    1097961!! ROAM carbon, alkalinity and oxygen cycle parameters 
     
    1101965!!       xthetarem :  oxygen consumption by carbon remineralisation 
    1102966!!       xo2min    :  oxygen minimum concentration 
    1103  
    1104967      IF(lwp) THEN 
    1105968          WRITE(numout,*) 'natroam' 
    1106969          WRITE(numout,*) ' ' 
    1107 !! 
    1108 !! ROAM carbon, alkalinity and oxygen cycle parameters 
    1109970          WRITE(numout,*) '=== ROAM carbon, alkalinity and oxygen cycle parameters' 
    1110971          WRITE(numout,*)     & 
     
    1136997 
    1137998      !READ(numnatm,natopt) 
    1138          ! Namelist natopt 
    1139          ! ------------------- 
    1140          REWIND( numnatp_ref )              ! Namelist natopt in reference namelist : MEDUSA diagnostics 
    1141          READ  ( numnatp_ref, natopt, IOSTAT = ios, ERR = 907) 
    1142 907      IF( ios /= 0 ) CALL ctl_nam ( ios , 'natopt in reference namelist', lwp ) 
    1143  
    1144          REWIND( numnatp_cfg )              ! Namelist natopt in configuration namelist : MEDUSA diagnostics 
    1145          READ  ( numnatp_cfg, natopt, IOSTAT = ios, ERR = 908 ) 
    1146 908      IF( ios /= 0 ) CALL ctl_nam ( ios , 'natopt in configuration namelist', lwp ) 
    1147          IF(lwm) WRITE ( numonp, natopt ) 
     999      ! Namelist natopt 
     1000      ! ------------------- 
     1001      REWIND( numnatp_ref )     ! Namelist natopt in reference namelist : MEDUSA diagnostics 
     1002      READ  ( numnatp_ref, natopt, IOSTAT = ios, ERR = 907) 
     1003 907  IF( ios /= 0 ) CALL ctl_nam ( ios , 'natopt in reference namelist', lwp ) 
     1004       
     1005      REWIND( numnatp_cfg )     ! Namelist natopt in configuration namelist : MEDUSA diagnostics 
     1006      READ  ( numnatp_cfg, natopt, IOSTAT = ios, ERR = 908 ) 
     1007 908  IF( ios /= 0 ) CALL ctl_nam ( ios , 'natopt in configuration namelist', lwp ) 
     1008      IF(lwm) WRITE ( numonp, natopt ) 
    11481009 
    11491010      IF(lwp) THEN 
     
    11581019         WRITE(numout,*) ' chla/chla+phea ratio            rpig  = ',rpig 
    11591020         WRITE(numout,*) ' ' 
    1160  
    11611021      ENDIF 
    11621022 
     
    11741034         endif 
    11751035         WRITE(numout,*) ' ' 
    1176        ENDIF 
     1036      ENDIF 
    11771037 
    11781038   END SUBROUTINE trc_nam_medusa 
     
    11901050      !!--------------------------------------------------------------------- 
    11911051      !! 
    1192       !! 
    11931052      !!----------------------------------------------------------------------             
    11941053      !! Variable conventions 
     
    11961055      !! 
    11971056      IF (iom_use("INVTN")) THEN  
    1198           med_diag%INVTN%dgsave = .TRUE. 
    1199       ELSE  
    1200           med_diag%INVTN%dgsave = .FALSE. 
    1201       ENDIF 
    1202       IF  (iom_use("INVTSI")) THEN  
    1203           med_diag%INVTSI%dgsave = .TRUE. 
    1204       ELSE  
    1205           med_diag%INVTSI%dgsave = .FALSE. 
    1206       ENDIF 
    1207       IF  (iom_use("INVTFE")) THEN  
    1208           med_diag%INVTFE%dgsave = .TRUE. 
    1209       ELSE  
    1210           med_diag%INVTFE%dgsave = .FALSE. 
    1211       ENDIF 
    1212       IF  (iom_use("PRN")) THEN  
    1213           med_diag%PRN%dgsave = .TRUE. 
    1214       ELSE  
    1215           med_diag%PRN%dgsave = .FALSE. 
    1216       ENDIF 
    1217       IF  (iom_use("MPN")) THEN  
    1218           med_diag%MPN%dgsave = .TRUE. 
    1219       ELSE  
    1220           med_diag%MPN%dgsave = .FALSE. 
    1221       ENDIF 
    1222       IF  (iom_use("PRD")) THEN  
    1223           med_diag%PRD%dgsave = .TRUE. 
    1224       ELSE  
    1225           med_diag%PRD%dgsave = .FALSE. 
    1226       ENDIF 
    1227       IF  (iom_use("MPD")) THEN  
    1228           med_diag%MPD%dgsave = .TRUE. 
    1229       ELSE  
    1230           med_diag%MPD%dgsave = .FALSE. 
    1231       ENDIF 
    1232       IF  (iom_use("DSED")) THEN  
    1233           med_diag%DSED%dgsave = .TRUE. 
    1234       ELSE  
    1235           med_diag%DSED%dgsave = .FALSE. 
    1236       ENDIF 
    1237       IF  (iom_use("OPAL")) THEN  
    1238           med_diag%OPAL%dgsave = .TRUE. 
    1239       ELSE  
    1240           med_diag%OPAL%dgsave = .FALSE. 
    1241       ENDIF 
    1242       IF  (iom_use("OPALDISS")) THEN  
    1243           med_diag%OPALDISS%dgsave = .TRUE. 
    1244       ELSE  
    1245           med_diag%OPALDISS%dgsave = .FALSE. 
    1246       ENDIF 
    1247       IF  (iom_use("GMIPn")) THEN  
    1248           med_diag%GMIPn%dgsave = .TRUE. 
    1249       ELSE  
    1250           med_diag%GMIPn%dgsave = .FALSE. 
    1251       ENDIF 
    1252       IF  (iom_use("GMID")) THEN  
    1253           med_diag%GMID%dgsave = .TRUE. 
    1254       ELSE  
    1255           med_diag%GMID%dgsave = .FALSE. 
    1256       ENDIF 
    1257       IF  (iom_use("MZMI")) THEN  
    1258           med_diag%MZMI%dgsave = .TRUE. 
    1259       ELSE  
    1260           med_diag%MZMI%dgsave = .FALSE. 
    1261       ENDIF 
    1262       IF  (iom_use("GMEPN")) THEN  
    1263           med_diag%GMEPN%dgsave = .TRUE. 
    1264       ELSE  
    1265           med_diag%GMEPN%dgsave = .FALSE. 
    1266       ENDIF 
    1267       IF  (iom_use("GMEPD")) THEN  
    1268           med_diag%GMEPD%dgsave = .TRUE. 
    1269       ELSE  
    1270           med_diag%GMEPD%dgsave = .FALSE. 
    1271       ENDIF 
    1272       IF  (iom_use("GMEZMI")) THEN  
    1273           med_diag%GMEZMI%dgsave = .TRUE. 
    1274       ELSE  
    1275           med_diag%GMEZMI%dgsave = .FALSE. 
    1276       ENDIF 
    1277       IF  (iom_use("GMED")) THEN  
    1278           med_diag%GMED%dgsave = .TRUE. 
    1279       ELSE  
    1280           med_diag%GMED%dgsave = .FALSE. 
    1281       ENDIF 
    1282       IF  (iom_use("MZME")) THEN  
    1283           med_diag%MZME%dgsave = .TRUE. 
    1284       ELSE  
    1285           med_diag%MZME%dgsave = .FALSE. 
    1286       ENDIF 
    1287       IF  (iom_use("DEXP")) THEN  
    1288           med_diag%DEXP%dgsave = .TRUE. 
    1289       ELSE  
    1290           med_diag%DEXP%dgsave = .FALSE. 
    1291       ENDIF 
    1292       IF  (iom_use("DETN")) THEN  
    1293           med_diag%DETN%dgsave = .TRUE. 
    1294       ELSE  
    1295           med_diag%DETN%dgsave = .FALSE. 
    1296       ENDIF 
    1297       IF  (iom_use("MDET")) THEN  
    1298           med_diag%MDET%dgsave = .TRUE. 
    1299       ELSE  
    1300           med_diag%MDET%dgsave = .FALSE. 
    1301       ENDIF 
    1302       IF  (iom_use("AEOLIAN")) THEN  
    1303           med_diag%AEOLIAN%dgsave = .TRUE. 
    1304       ELSE  
    1305           med_diag%AEOLIAN%dgsave = .FALSE. 
    1306       ENDIF 
    1307       IF  (iom_use("BENTHIC")) THEN  
    1308           med_diag%BENTHIC%dgsave = .TRUE. 
    1309       ELSE  
    1310           med_diag%BENTHIC%dgsave = .FALSE. 
    1311       ENDIF 
    1312       IF  (iom_use("SCAVENGE")) THEN  
    1313           med_diag%SCAVENGE%dgsave = .TRUE. 
    1314       ELSE  
    1315           med_diag%SCAVENGE%dgsave = .FALSE. 
    1316       ENDIF 
    1317       IF  (iom_use("PN_JLIM")) THEN  
    1318           med_diag%PN_JLIM%dgsave = .TRUE. 
    1319       ELSE  
    1320           med_diag%PN_JLIM%dgsave = .FALSE. 
    1321       ENDIF 
    1322       IF  (iom_use("PN_NLIM")) THEN  
    1323           med_diag%PN_NLIM%dgsave = .TRUE. 
    1324       ELSE  
    1325           med_diag%PN_NLIM%dgsave = .FALSE. 
    1326       ENDIF 
    1327       IF  (iom_use("PN_FELIM")) THEN  
    1328           med_diag%PN_FELIM%dgsave = .TRUE. 
    1329       ELSE  
    1330           med_diag%PN_FELIM%dgsave = .FALSE. 
    1331       ENDIF 
    1332       IF  (iom_use("PD_JLIM")) THEN  
    1333           med_diag%PD_JLIM%dgsave = .TRUE. 
    1334       ELSE  
    1335           med_diag%PD_JLIM%dgsave = .FALSE. 
    1336       ENDIF 
    1337       IF  (iom_use("PD_NLIM")) THEN  
    1338           med_diag%PD_NLIM%dgsave = .TRUE. 
    1339       ELSE  
    1340           med_diag%PD_NLIM%dgsave = .FALSE. 
    1341       ENDIF 
    1342       IF  (iom_use("PD_FELIM")) THEN  
    1343           med_diag%PD_FELIM%dgsave = .TRUE. 
    1344       ELSE  
    1345           med_diag%PD_FELIM%dgsave = .FALSE. 
    1346       ENDIF 
    1347       IF  (iom_use("PD_SILIM")) THEN  
    1348           med_diag%PD_SILIM%dgsave = .TRUE. 
    1349       ELSE  
    1350           med_diag%PD_SILIM%dgsave = .FALSE. 
    1351       ENDIF 
    1352       IF  (iom_use("PDSILIM2")) THEN  
    1353           med_diag%PDSILIM2%dgsave = .TRUE. 
    1354       ELSE  
    1355           med_diag%PDSILIM2%dgsave = .FALSE. 
    1356       ENDIF 
    1357       IF  (iom_use("SDT__100")) THEN  
    1358           med_diag%SDT__100%dgsave = .TRUE. 
    1359       ELSE  
    1360           med_diag%SDT__100%dgsave = .FALSE. 
    1361       ENDIF 
    1362       IF  (iom_use("SDT__200")) THEN  
    1363           med_diag%SDT__200%dgsave = .TRUE. 
    1364       ELSE  
    1365           med_diag%SDT__200%dgsave = .FALSE. 
    1366       ENDIF 
    1367       IF  (iom_use("SDT__500")) THEN  
    1368           med_diag%SDT__500%dgsave = .TRUE. 
    1369       ELSE  
    1370           med_diag%SDT__500%dgsave = .FALSE. 
    1371       ENDIF 
    1372       IF  (iom_use("SDT_1000")) THEN  
    1373           med_diag%SDT_1000%dgsave = .TRUE. 
    1374       ELSE  
    1375           med_diag%SDT_1000%dgsave = .FALSE. 
    1376       ENDIF 
    1377       IF  (iom_use("TOTREG_N")) THEN  
    1378           med_diag%TOTREG_N%dgsave = .TRUE. 
    1379       ELSE  
    1380           med_diag%TOTREG_N%dgsave = .FALSE. 
    1381       ENDIF 
    1382       IF  (iom_use("TOTRG_SI")) THEN  
    1383           med_diag%TOTRG_SI%dgsave = .TRUE. 
    1384       ELSE  
    1385           med_diag%TOTRG_SI%dgsave = .FALSE. 
    1386       ENDIF 
    1387       IF  (iom_use("REG__100")) THEN  
    1388           med_diag%REG__100%dgsave = .TRUE. 
    1389       ELSE  
    1390           med_diag%REG__100%dgsave = .FALSE. 
    1391       ENDIF 
    1392       IF  (iom_use("REG__200")) THEN  
    1393           med_diag%REG__200%dgsave = .TRUE. 
    1394       ELSE  
    1395           med_diag%REG__200%dgsave = .FALSE. 
    1396       ENDIF 
    1397       IF  (iom_use("REG__500")) THEN  
    1398           med_diag%REG__500%dgsave = .TRUE. 
    1399       ELSE  
    1400           med_diag%REG__500%dgsave = .FALSE. 
    1401       ENDIF 
    1402       IF  (iom_use("REG_1000")) THEN  
    1403           med_diag%REG_1000%dgsave = .TRUE. 
    1404       ELSE  
    1405           med_diag%REG_1000%dgsave = .FALSE. 
    1406       ENDIF 
    1407       IF  (iom_use("FASTN")) THEN  
    1408           med_diag%FASTN%dgsave = .TRUE. 
    1409       ELSE  
    1410           med_diag%FASTN%dgsave = .FALSE. 
    1411       ENDIF 
    1412       IF  (iom_use("FASTSI")) THEN  
    1413           med_diag%FASTSI%dgsave = .TRUE. 
    1414       ELSE  
    1415           med_diag%FASTSI%dgsave = .FALSE. 
    1416       ENDIF 
    1417       IF  (iom_use("FASTFE")) THEN  
    1418           med_diag%FASTFE%dgsave = .TRUE. 
    1419       ELSE  
    1420           med_diag%FASTFE%dgsave = .FALSE. 
    1421       ENDIF 
    1422       IF  (iom_use("FASTC")) THEN  
    1423           med_diag%FASTC%dgsave = .TRUE. 
    1424       ELSE  
    1425           med_diag%FASTC%dgsave = .FALSE. 
    1426       ENDIF 
    1427       IF  (iom_use("FASTCA")) THEN  
    1428           med_diag%FASTCA%dgsave = .TRUE. 
    1429       ELSE  
    1430           med_diag%FASTCA%dgsave = .FALSE. 
    1431       ENDIF 
    1432       IF  (iom_use("FDT__100")) THEN  
    1433           med_diag%FDT__100%dgsave = .TRUE. 
    1434       ELSE  
    1435           med_diag%FDT__100%dgsave = .FALSE. 
    1436       ENDIF 
    1437       IF  (iom_use("FDT__200")) THEN  
    1438           med_diag%FDT__200%dgsave = .TRUE. 
    1439       ELSE  
    1440           med_diag%FDT__200%dgsave = .FALSE. 
    1441       ENDIF 
    1442       IF  (iom_use("FDT__500")) THEN  
    1443           med_diag%FDT__500%dgsave = .TRUE. 
    1444       ELSE  
    1445           med_diag%FDT__500%dgsave = .FALSE. 
    1446       ENDIF 
    1447       IF  (iom_use("FDT_1000")) THEN  
    1448           med_diag%FDT_1000%dgsave = .TRUE. 
    1449       ELSE  
    1450           med_diag%FDT_1000%dgsave = .FALSE. 
    1451       ENDIF 
    1452       IF  (iom_use("RG__100F")) THEN  
    1453           med_diag%RG__100F%dgsave = .TRUE. 
    1454       ELSE  
    1455           med_diag%RG__100F%dgsave = .FALSE. 
    1456       ENDIF 
    1457       IF  (iom_use("RG__200F")) THEN  
    1458           med_diag%RG__200F%dgsave = .TRUE. 
    1459       ELSE  
    1460           med_diag%RG__200F%dgsave = .FALSE. 
    1461       ENDIF 
    1462       IF  (iom_use("RG__500F")) THEN  
    1463           med_diag%RG__500F%dgsave = .TRUE. 
    1464       ELSE  
    1465           med_diag%RG__500F%dgsave = .FALSE. 
    1466       ENDIF 
    1467       IF  (iom_use("RG_1000F")) THEN  
    1468           med_diag%RG_1000F%dgsave = .TRUE. 
    1469       ELSE  
    1470           med_diag%RG_1000F%dgsave = .FALSE. 
    1471       ENDIF 
    1472       IF  (iom_use("FDS__100")) THEN  
    1473           med_diag%FDS__100%dgsave = .TRUE. 
    1474       ELSE  
    1475           med_diag%FDS__100%dgsave = .FALSE. 
    1476       ENDIF 
    1477       IF  (iom_use("FDS__200")) THEN  
    1478           med_diag%FDS__200%dgsave = .TRUE. 
    1479       ELSE  
    1480           med_diag%FDS__200%dgsave = .FALSE. 
    1481       ENDIF 
    1482       IF  (iom_use("FDS__500")) THEN  
    1483           med_diag%FDS__500%dgsave = .TRUE. 
    1484       ELSE  
    1485           med_diag%FDS__500%dgsave = .FALSE. 
    1486       ENDIF 
    1487       IF  (iom_use("FDS_1000")) THEN  
    1488           med_diag%FDS_1000%dgsave = .TRUE. 
    1489       ELSE  
    1490           med_diag%FDS_1000%dgsave = .FALSE. 
    1491       ENDIF 
    1492       IF  (iom_use("RGS_100F")) THEN  
    1493           med_diag%RGS_100F%dgsave = .TRUE. 
    1494       ELSE  
    1495           med_diag%RGS_100F%dgsave = .FALSE. 
    1496       ENDIF 
    1497       IF  (iom_use("RGS_200F")) THEN  
    1498           med_diag%RGS_200F%dgsave = .TRUE. 
    1499       ELSE  
    1500           med_diag%RGS_200F%dgsave = .FALSE. 
    1501       ENDIF 
    1502       IF  (iom_use("RGS_500F")) THEN  
    1503           med_diag%RGS_500F%dgsave = .TRUE. 
    1504       ELSE  
    1505           med_diag%RGS_500F%dgsave = .FALSE. 
    1506       ENDIF 
    1507       IF  (iom_use("RGS1000F")) THEN  
    1508           med_diag%RGS1000F%dgsave = .TRUE. 
    1509       ELSE  
    1510           med_diag%RGS1000F%dgsave = .FALSE. 
    1511       ENDIF 
    1512       IF  (iom_use("REMINN")) THEN  
    1513           med_diag%REMINN%dgsave = .TRUE. 
    1514       ELSE  
    1515           med_diag%REMINN%dgsave = .FALSE. 
    1516       ENDIF 
    1517       IF  (iom_use("REMINSI")) THEN  
    1518           med_diag%REMINSI%dgsave = .TRUE. 
    1519       ELSE  
    1520           med_diag%REMINSI%dgsave = .FALSE. 
    1521       ENDIF 
    1522       IF  (iom_use("REMINFE")) THEN  
    1523           med_diag%REMINFE%dgsave = .TRUE. 
    1524       ELSE  
    1525           med_diag%REMINFE%dgsave = .FALSE. 
    1526       ENDIF 
    1527       IF  (iom_use("REMINC")) THEN  
    1528           med_diag%REMINC%dgsave = .TRUE. 
    1529       ELSE  
    1530           med_diag%REMINC%dgsave = .FALSE. 
    1531       ENDIF 
    1532       IF  (iom_use("REMINCA")) THEN  
    1533           med_diag%REMINCA%dgsave = .TRUE. 
    1534       ELSE  
    1535           med_diag%REMINCA%dgsave = .FALSE. 
    1536       ENDIF 
    1537       IF  (iom_use("SEAFLRN")) THEN  
    1538           med_diag%SEAFLRN%dgsave = .TRUE. 
    1539       ELSE  
    1540           med_diag%SEAFLRN%dgsave = .FALSE. 
    1541       ENDIF 
    1542       IF  (iom_use("SEAFLRSI")) THEN  
    1543           med_diag%SEAFLRSI%dgsave = .TRUE. 
    1544       ELSE  
    1545           med_diag%SEAFLRSI%dgsave = .FALSE. 
    1546       ENDIF 
    1547       IF  (iom_use("SEAFLRFE")) THEN  
    1548           med_diag%SEAFLRFE%dgsave = .TRUE. 
    1549       ELSE  
    1550           med_diag%SEAFLRFE%dgsave = .FALSE. 
    1551       ENDIF 
    1552       IF  (iom_use("SEAFLRC")) THEN  
    1553           med_diag%SEAFLRC%dgsave = .TRUE. 
    1554       ELSE  
    1555           med_diag%SEAFLRC%dgsave = .FALSE. 
    1556       ENDIF 
    1557       IF  (iom_use("SEAFLRCA")) THEN  
    1558           med_diag%SEAFLRCA%dgsave = .TRUE. 
    1559       ELSE  
    1560           med_diag%SEAFLRCA%dgsave = .FALSE. 
    1561       ENDIF 
    1562       IF  (iom_use("MED_QSR")) THEN  
    1563           med_diag%MED_QSR%dgsave = .TRUE. 
    1564       ELSE  
    1565           med_diag%MED_QSR%dgsave = .FALSE. 
    1566       ENDIF 
    1567       IF  (iom_use("MED_XPAR")) THEN  
    1568           med_diag%MED_XPAR%dgsave = .TRUE. 
    1569       ELSE  
    1570           med_diag%MED_XPAR%dgsave = .FALSE. 
    1571       ENDIF 
    1572       IF  (iom_use("INTFLX_N")) THEN  
    1573           med_diag%INTFLX_N%dgsave = .TRUE. 
    1574       ELSE  
    1575           med_diag%INTFLX_N%dgsave = .FALSE. 
    1576       ENDIF 
    1577       IF  (iom_use("INTFLX_SI")) THEN  
    1578           med_diag%INTFLX_SI%dgsave = .TRUE. 
    1579       ELSE  
    1580           med_diag%INTFLX_SI%dgsave = .FALSE. 
    1581       ENDIF 
    1582       IF  (iom_use("INTFLX_FE")) THEN  
    1583           med_diag%INTFLX_FE%dgsave = .TRUE. 
    1584       ELSE  
    1585           med_diag%INTFLX_FE%dgsave = .FALSE. 
    1586       ENDIF 
    1587       IF  (iom_use("INT_PN")) THEN  
    1588           med_diag%INT_PN%dgsave = .TRUE. 
    1589       ELSE  
    1590           med_diag%INT_PN%dgsave = .FALSE. 
    1591       ENDIF 
    1592       IF  (iom_use("INT_PD")) THEN  
    1593           med_diag%INT_PD%dgsave = .TRUE. 
    1594       ELSE  
    1595           med_diag%INT_PD%dgsave = .FALSE. 
    1596       ENDIF 
    1597       IF  (iom_use("ML_PRN")) THEN  
    1598           med_diag%ML_PRN%dgsave = .TRUE. 
    1599       ELSE  
    1600           med_diag%ML_PRN%dgsave = .FALSE. 
    1601       ENDIF 
    1602       IF  (iom_use("ML_PRD")) THEN  
    1603           med_diag%ML_PRD%dgsave = .TRUE. 
    1604       ELSE  
    1605           med_diag%ML_PRD%dgsave = .FALSE. 
    1606       ENDIF 
    1607       IF  (iom_use("OCAL_CCD")) THEN  
    1608           med_diag%OCAL_CCD%dgsave = .TRUE. 
    1609       ELSE  
    1610           med_diag%OCAL_CCD%dgsave = .FALSE. 
    1611       ENDIF 
    1612       IF  (iom_use("OCAL_LVL")) THEN  
    1613           med_diag%OCAL_LVL%dgsave = .TRUE. 
    1614       ELSE  
    1615           med_diag%OCAL_LVL%dgsave = .FALSE. 
    1616       ENDIF 
    1617       IF  (iom_use("FE_0000")) THEN  
    1618           med_diag%FE_0000%dgsave = .TRUE. 
    1619       ELSE  
    1620           med_diag%FE_0000%dgsave = .FALSE. 
    1621       ENDIF 
    1622       IF  (iom_use("FE_0100")) THEN  
    1623           med_diag%FE_0100%dgsave = .TRUE. 
    1624       ELSE  
    1625           med_diag%FE_0100%dgsave = .FALSE. 
    1626       ENDIF 
    1627       IF  (iom_use("FE_0200")) THEN  
    1628           med_diag%FE_0200%dgsave = .TRUE. 
    1629       ELSE  
    1630           med_diag%FE_0200%dgsave = .FALSE. 
    1631       ENDIF 
    1632       IF  (iom_use("FE_0500")) THEN  
    1633           med_diag%FE_0500%dgsave = .TRUE. 
    1634       ELSE  
    1635           med_diag%FE_0500%dgsave = .FALSE. 
    1636       ENDIF 
    1637       IF  (iom_use("FE_1000")) THEN  
    1638           med_diag%FE_1000%dgsave = .TRUE. 
    1639       ELSE  
    1640           med_diag%FE_1000%dgsave = .FALSE. 
    1641       ENDIF 
    1642       IF  (iom_use("MED_XZE")) THEN  
    1643           med_diag%MED_XZE%dgsave = .TRUE. 
    1644       ELSE  
    1645           med_diag%MED_XZE%dgsave = .FALSE. 
    1646       ENDIF 
    1647       IF  (iom_use("WIND")) THEN  
    1648           med_diag%WIND%dgsave = .TRUE. 
    1649       ELSE  
    1650           med_diag%WIND%dgsave = .FALSE. 
    1651       ENDIF 
    1652       IF  (iom_use("ATM_PCO2")) THEN  
    1653           med_diag%ATM_PCO2%dgsave = .TRUE. 
    1654       ELSE  
    1655           med_diag%ATM_PCO2%dgsave = .FALSE. 
    1656       ENDIF 
    1657       IF  (iom_use("OCN_PH")) THEN  
    1658           med_diag%OCN_PH%dgsave = .TRUE. 
    1659       ELSE  
    1660           med_diag%OCN_PH%dgsave = .FALSE. 
    1661       ENDIF 
    1662       IF  (iom_use("OCN_PCO2")) THEN  
    1663           med_diag%OCN_PCO2%dgsave = .TRUE. 
    1664       ELSE  
    1665           med_diag%OCN_PCO2%dgsave = .FALSE. 
    1666       ENDIF 
    1667       IF  (iom_use("OCNH2CO3")) THEN  
    1668           med_diag%OCNH2CO3%dgsave = .TRUE. 
    1669       ELSE  
    1670           med_diag%OCNH2CO3%dgsave = .FALSE. 
    1671       ENDIF 
    1672       IF  (iom_use("OCN_HCO3")) THEN  
    1673           med_diag%OCN_HCO3%dgsave = .TRUE. 
    1674       ELSE  
    1675           med_diag%OCN_HCO3%dgsave = .FALSE. 
    1676       ENDIF 
    1677       IF  (iom_use("OCN_CO3")) THEN  
    1678           med_diag%OCN_CO3%dgsave = .TRUE. 
    1679       ELSE  
    1680           med_diag%OCN_CO3%dgsave = .FALSE. 
    1681       ENDIF 
    1682       IF  (iom_use("CO2FLUX")) THEN  
    1683           med_diag%CO2FLUX%dgsave = .TRUE. 
    1684       ELSE  
    1685           med_diag%CO2FLUX%dgsave = .FALSE. 
    1686       ENDIF 
    1687       IF  (iom_use("OM_CAL")) THEN  
    1688           med_diag%OM_CAL%dgsave = .TRUE. 
    1689       ELSE  
    1690           med_diag%OM_CAL%dgsave = .FALSE. 
    1691       ENDIF 
    1692       IF  (iom_use("OM_ARG")) THEN  
    1693           med_diag%OM_ARG%dgsave = .TRUE. 
    1694       ELSE  
    1695           med_diag%OM_ARG%dgsave = .FALSE. 
    1696       ENDIF 
    1697       IF  (iom_use("TCO2")) THEN  
    1698           med_diag%TCO2%dgsave = .TRUE. 
    1699       ELSE  
    1700           med_diag%TCO2%dgsave = .FALSE. 
    1701       ENDIF 
    1702       IF  (iom_use("TALK")) THEN  
    1703           med_diag%TALK%dgsave = .TRUE. 
    1704       ELSE  
    1705           med_diag%TALK%dgsave = .FALSE. 
    1706       ENDIF 
    1707       IF  (iom_use("KW660")) THEN  
    1708           med_diag%KW660%dgsave = .TRUE. 
    1709       ELSE  
    1710           med_diag%KW660%dgsave = .FALSE. 
    1711       ENDIF 
    1712       IF  (iom_use("ATM_PP0")) THEN  
    1713           med_diag%ATM_PP0%dgsave = .TRUE. 
    1714       ELSE  
    1715           med_diag%ATM_PP0%dgsave = .FALSE. 
    1716       ENDIF 
    1717       IF  (iom_use("O2FLUX")) THEN  
    1718           med_diag%O2FLUX%dgsave = .TRUE. 
    1719       ELSE  
    1720           med_diag%O2FLUX%dgsave = .FALSE. 
    1721       ENDIF 
    1722       IF  (iom_use("O2SAT")) THEN  
    1723           med_diag%O2SAT%dgsave = .TRUE. 
    1724       ELSE  
    1725           med_diag%O2SAT%dgsave = .FALSE. 
    1726       ENDIF 
    1727       IF  (iom_use("CAL_CCD")) THEN  
    1728           med_diag%CAL_CCD%dgsave = .TRUE. 
    1729       ELSE  
    1730           med_diag%CAL_CCD%dgsave = .FALSE. 
    1731       ENDIF 
    1732       IF  (iom_use("ARG_CCD")) THEN  
    1733           med_diag%ARG_CCD%dgsave = .TRUE. 
    1734       ELSE  
    1735           med_diag%ARG_CCD%dgsave = .FALSE. 
    1736       ENDIF 
    1737       IF  (iom_use("SFR_OCAL")) THEN  
    1738           med_diag%SFR_OCAL%dgsave = .TRUE. 
    1739       ELSE  
    1740           med_diag%SFR_OCAL%dgsave = .FALSE. 
    1741       ENDIF 
    1742       IF  (iom_use("SFR_OARG")) THEN  
    1743           med_diag%SFR_OARG%dgsave = .TRUE. 
    1744       ELSE  
    1745           med_diag%SFR_OARG%dgsave = .FALSE. 
    1746       ENDIF 
    1747       IF  (iom_use("N_PROD")) THEN  
    1748           med_diag%N_PROD%dgsave = .TRUE. 
    1749       ELSE  
    1750           med_diag%N_PROD%dgsave = .FALSE. 
    1751       ENDIF 
    1752       IF  (iom_use("N_CONS")) THEN  
    1753           med_diag%N_CONS%dgsave = .TRUE. 
    1754       ELSE  
    1755           med_diag%N_CONS%dgsave = .FALSE. 
    1756       ENDIF 
    1757       IF  (iom_use("C_PROD")) THEN  
    1758           med_diag%C_PROD%dgsave = .TRUE. 
    1759       ELSE  
    1760           med_diag%C_PROD%dgsave = .FALSE. 
    1761       ENDIF 
    1762       IF  (iom_use("C_CONS")) THEN  
    1763           med_diag%C_CONS%dgsave = .TRUE. 
    1764       ELSE  
    1765           med_diag%C_CONS%dgsave = .FALSE. 
    1766       ENDIF 
    1767       IF  (iom_use("O2_PROD")) THEN  
    1768           med_diag%O2_PROD%dgsave = .TRUE. 
    1769       ELSE  
    1770           med_diag%O2_PROD%dgsave = .FALSE. 
    1771       ENDIF 
    1772       IF  (iom_use("O2_CONS")) THEN  
    1773           med_diag%O2_CONS%dgsave = .TRUE. 
    1774       ELSE  
    1775           med_diag%O2_CONS%dgsave = .FALSE. 
    1776       ENDIF 
    1777       IF  (iom_use("O2_ANOX")) THEN  
    1778           med_diag%O2_ANOX%dgsave = .TRUE. 
    1779       ELSE  
    1780           med_diag%O2_ANOX%dgsave = .FALSE. 
    1781       ENDIF 
    1782       IF  (iom_use("RR_0100")) THEN  
    1783           med_diag%RR_0100%dgsave = .TRUE. 
    1784       ELSE  
    1785           med_diag%RR_0100%dgsave = .FALSE. 
    1786       ENDIF 
    1787       IF  (iom_use("RR_0500")) THEN  
    1788           med_diag%RR_0500%dgsave = .TRUE. 
    1789       ELSE  
    1790           med_diag%RR_0500%dgsave = .FALSE. 
    1791       ENDIF 
    1792       IF  (iom_use("RR_1000")) THEN  
    1793           med_diag%RR_1000%dgsave = .TRUE. 
    1794       ELSE  
    1795           med_diag%RR_1000%dgsave = .FALSE. 
    1796       ENDIF 
    1797       IF  (iom_use("IBEN_N")) THEN  
    1798           med_diag%IBEN_N%dgsave = .TRUE. 
    1799       ELSE  
    1800           med_diag%IBEN_N%dgsave = .FALSE. 
    1801       ENDIF 
    1802       IF  (iom_use("IBEN_FE")) THEN  
    1803           med_diag%IBEN_FE%dgsave = .TRUE. 
    1804       ELSE  
    1805           med_diag%IBEN_FE%dgsave = .FALSE. 
    1806       ENDIF 
    1807       IF  (iom_use("IBEN_C")) THEN  
    1808           med_diag%IBEN_C%dgsave = .TRUE. 
    1809       ELSE  
    1810           med_diag%IBEN_C%dgsave = .FALSE. 
    1811       ENDIF 
    1812       IF  (iom_use("IBEN_SI")) THEN  
    1813           med_diag%IBEN_SI%dgsave = .TRUE. 
    1814       ELSE  
    1815           med_diag%IBEN_SI%dgsave = .FALSE. 
    1816       ENDIF 
    1817       IF  (iom_use("IBEN_CA")) THEN  
    1818           med_diag%IBEN_CA%dgsave = .TRUE. 
    1819       ELSE  
    1820           med_diag%IBEN_CA%dgsave = .FALSE. 
    1821       ENDIF 
    1822       IF  (iom_use("OBEN_N")) THEN  
    1823           med_diag%OBEN_N%dgsave = .TRUE. 
    1824       ELSE  
    1825           med_diag%OBEN_N%dgsave = .FALSE. 
    1826       ENDIF 
    1827       IF  (iom_use("OBEN_FE")) THEN  
    1828           med_diag%OBEN_FE%dgsave = .TRUE. 
    1829       ELSE  
    1830           med_diag%OBEN_FE%dgsave = .FALSE. 
    1831       ENDIF 
    1832       IF  (iom_use("OBEN_C")) THEN  
    1833           med_diag%OBEN_C%dgsave = .TRUE. 
    1834       ELSE  
    1835           med_diag%OBEN_C%dgsave = .FALSE. 
    1836       ENDIF 
    1837       IF  (iom_use("OBEN_SI")) THEN  
    1838           med_diag%OBEN_SI%dgsave = .TRUE. 
    1839       ELSE  
    1840           med_diag%OBEN_SI%dgsave = .FALSE. 
    1841       ENDIF 
    1842       IF  (iom_use("OBEN_CA")) THEN  
    1843           med_diag%OBEN_CA%dgsave = .TRUE. 
    1844       ELSE  
    1845           med_diag%OBEN_CA%dgsave = .FALSE. 
    1846       ENDIF 
    1847       IF  (iom_use("BEN_N")) THEN  
    1848           med_diag%BEN_N%dgsave = .TRUE. 
    1849       ELSE  
    1850           med_diag%BEN_N%dgsave = .FALSE. 
    1851       ENDIF 
    1852       IF  (iom_use("BEN_FE")) THEN  
    1853           med_diag%BEN_FE%dgsave = .TRUE. 
    1854       ELSE  
    1855           med_diag%BEN_FE%dgsave = .FALSE. 
    1856       ENDIF 
    1857       IF  (iom_use("BEN_C")) THEN  
    1858           med_diag%BEN_C%dgsave = .TRUE. 
    1859       ELSE  
    1860           med_diag%BEN_C%dgsave = .FALSE. 
    1861       ENDIF 
    1862       IF  (iom_use("BEN_SI")) THEN  
    1863           med_diag%BEN_SI%dgsave = .TRUE. 
    1864       ELSE  
    1865           med_diag%BEN_SI%dgsave = .FALSE. 
    1866       ENDIF 
    1867       IF  (iom_use("BEN_CA")) THEN  
    1868           med_diag%BEN_CA%dgsave = .TRUE. 
    1869       ELSE  
    1870           med_diag%BEN_CA%dgsave = .FALSE. 
    1871       ENDIF 
    1872       IF  (iom_use("RUNOFF")) THEN  
    1873           med_diag%RUNOFF%dgsave = .TRUE. 
    1874       ELSE  
    1875           med_diag%RUNOFF%dgsave = .FALSE. 
    1876       ENDIF 
    1877       IF  (iom_use("RIV_N")) THEN  
    1878           med_diag%RIV_N%dgsave = .TRUE. 
    1879       ELSE  
    1880           med_diag%RIV_N%dgsave = .FALSE. 
    1881       ENDIF 
    1882       IF  (iom_use("RIV_SI")) THEN  
    1883           med_diag%RIV_SI%dgsave = .TRUE. 
    1884       ELSE  
    1885           med_diag%RIV_SI%dgsave = .FALSE. 
    1886       ENDIF 
    1887       IF  (iom_use("RIV_C")) THEN  
    1888           med_diag%RIV_C%dgsave = .TRUE. 
    1889       ELSE  
    1890           med_diag%RIV_C%dgsave = .FALSE. 
    1891       ENDIF 
    1892       IF  (iom_use("RIV_ALK")) THEN  
    1893           med_diag%RIV_ALK%dgsave = .TRUE. 
    1894       ELSE  
    1895           med_diag%RIV_ALK%dgsave = .FALSE. 
    1896       ENDIF 
    1897       IF  (iom_use("DETC")) THEN  
    1898           med_diag%DETC%dgsave = .TRUE. 
    1899       ELSE  
    1900           med_diag%DETC%dgsave = .FALSE. 
    1901       ENDIF 
    1902       IF  (iom_use("SDC__100")) THEN  
    1903           med_diag%SDC__100%dgsave = .TRUE. 
    1904       ELSE  
    1905           med_diag%SDC__100%dgsave = .FALSE. 
    1906       ENDIF 
    1907       IF  (iom_use("SDC__200")) THEN  
    1908           med_diag%SDC__200%dgsave = .TRUE. 
    1909       ELSE  
    1910           med_diag%SDC__200%dgsave = .FALSE. 
    1911       ENDIF 
    1912       IF  (iom_use("SDC__500")) THEN  
    1913           med_diag%SDC__500%dgsave = .TRUE. 
    1914       ELSE  
    1915           med_diag%SDC__500%dgsave = .FALSE. 
    1916       ENDIF 
    1917       IF  (iom_use("SDC_1000")) THEN  
    1918           med_diag%SDC_1000%dgsave = .TRUE. 
    1919       ELSE  
    1920           med_diag%SDC_1000%dgsave = .FALSE. 
    1921       ENDIF 
    1922       IF  (iom_use("INVTC")) THEN  
    1923           med_diag%INVTC%dgsave = .TRUE. 
    1924       ELSE  
    1925           med_diag%INVTC%dgsave = .FALSE. 
    1926       ENDIF 
    1927       IF  (iom_use("INVTALK")) THEN  
    1928           med_diag%INVTALK%dgsave = .TRUE. 
    1929       ELSE  
    1930           med_diag%INVTALK%dgsave = .FALSE. 
    1931       ENDIF 
    1932       IF  (iom_use("INVTO2")) THEN  
    1933           med_diag%INVTO2%dgsave = .TRUE. 
    1934       ELSE  
    1935           med_diag%INVTO2%dgsave = .FALSE. 
    1936       ENDIF 
    1937       IF  (iom_use("LYSO_CA")) THEN  
    1938           med_diag%LYSO_CA%dgsave = .TRUE. 
    1939       ELSE  
    1940           med_diag%LYSO_CA%dgsave = .FALSE. 
    1941       ENDIF 
    1942       IF  (iom_use("COM_RESP")) THEN  
    1943           med_diag%COM_RESP%dgsave = .TRUE. 
    1944       ELSE  
    1945           med_diag%COM_RESP%dgsave = .FALSE. 
    1946       ENDIF 
    1947       IF  (iom_use("PN_LLOSS")) THEN  
    1948           med_diag%PN_LLOSS%dgsave = .TRUE. 
    1949       ELSE  
    1950           med_diag%PN_LLOSS%dgsave = .FALSE. 
    1951       ENDIF 
    1952       IF  (iom_use("PD_LLOSS")) THEN  
    1953           med_diag%PD_LLOSS%dgsave = .TRUE. 
    1954       ELSE  
    1955           med_diag%PD_LLOSS%dgsave = .FALSE. 
    1956       ENDIF 
    1957       IF  (iom_use("ZI_LLOSS")) THEN  
    1958           med_diag%ZI_LLOSS%dgsave = .TRUE. 
    1959       ELSE  
    1960           med_diag%ZI_LLOSS%dgsave = .FALSE. 
    1961       ENDIF 
    1962       IF  (iom_use("ZE_LLOSS")) THEN  
    1963           med_diag%ZE_LLOSS%dgsave = .TRUE. 
    1964       ELSE  
    1965           med_diag%ZE_LLOSS%dgsave = .FALSE. 
    1966       ENDIF 
    1967       IF  (iom_use("ZI_MES_N")) THEN  
    1968           med_diag%ZI_MES_N%dgsave = .TRUE. 
    1969       ELSE  
    1970           med_diag%ZI_MES_N%dgsave = .FALSE. 
    1971       ENDIF 
    1972       IF  (iom_use("ZI_MES_D")) THEN  
    1973           med_diag%ZI_MES_D%dgsave = .TRUE. 
    1974       ELSE  
    1975           med_diag%ZI_MES_D%dgsave = .FALSE. 
    1976       ENDIF 
    1977       IF  (iom_use("ZI_MES_C")) THEN  
    1978           med_diag%ZI_MES_C%dgsave = .TRUE. 
    1979       ELSE  
    1980           med_diag%ZI_MES_C%dgsave = .FALSE. 
    1981       ENDIF 
    1982       IF  (iom_use("ZI_MESDC")) THEN  
    1983           med_diag%ZI_MESDC%dgsave = .TRUE. 
    1984       ELSE  
    1985           med_diag%ZI_MESDC%dgsave = .FALSE. 
    1986       ENDIF 
    1987       IF  (iom_use("ZI_EXCR")) THEN  
    1988           med_diag%ZI_EXCR%dgsave = .TRUE. 
    1989       ELSE  
    1990           med_diag%ZI_EXCR%dgsave = .FALSE. 
    1991       ENDIF 
    1992       IF  (iom_use("ZI_RESP")) THEN  
    1993           med_diag%ZI_RESP%dgsave = .TRUE. 
    1994       ELSE  
    1995           med_diag%ZI_RESP%dgsave = .FALSE. 
    1996       ENDIF 
    1997       IF  (iom_use("ZI_GROW")) THEN  
    1998           med_diag%ZI_GROW%dgsave = .TRUE. 
    1999       ELSE  
    2000           med_diag%ZI_GROW%dgsave = .FALSE. 
    2001       ENDIF 
    2002       IF  (iom_use("ZE_MES_N")) THEN  
    2003           med_diag%ZE_MES_N%dgsave = .TRUE. 
    2004       ELSE  
    2005           med_diag%ZE_MES_N%dgsave = .FALSE. 
    2006       ENDIF 
    2007       IF  (iom_use("ZE_MES_D")) THEN  
    2008           med_diag%ZE_MES_D%dgsave = .TRUE. 
    2009       ELSE  
    2010           med_diag%ZE_MES_D%dgsave = .FALSE. 
    2011       ENDIF 
    2012       IF  (iom_use("ZE_MES_C")) THEN  
    2013           med_diag%ZE_MES_C%dgsave = .TRUE. 
    2014       ELSE  
    2015           med_diag%ZE_MES_C%dgsave = .FALSE. 
    2016       ENDIF 
    2017       IF  (iom_use("ZE_MESDC")) THEN  
    2018           med_diag%ZE_MESDC%dgsave = .TRUE. 
    2019       ELSE  
    2020           med_diag%ZE_MESDC%dgsave = .FALSE. 
    2021       ENDIF 
    2022       IF  (iom_use("ZE_EXCR")) THEN  
    2023           med_diag%ZE_EXCR%dgsave = .TRUE. 
    2024       ELSE  
    2025           med_diag%ZE_EXCR%dgsave = .FALSE. 
    2026       ENDIF 
    2027       IF  (iom_use("ZE_RESP")) THEN  
    2028           med_diag%ZE_RESP%dgsave = .TRUE. 
    2029       ELSE  
    2030           med_diag%ZE_RESP%dgsave = .FALSE. 
    2031       ENDIF 
    2032       IF  (iom_use("ZE_GROW")) THEN  
    2033           med_diag%ZE_GROW%dgsave = .TRUE. 
    2034       ELSE  
    2035           med_diag%ZE_GROW%dgsave = .FALSE. 
    2036       ENDIF 
    2037       IF  (iom_use("MDETC")) THEN  
    2038           med_diag%MDETC%dgsave = .TRUE. 
    2039       ELSE  
    2040           med_diag%MDETC%dgsave = .FALSE. 
    2041       ENDIF 
    2042       IF  (iom_use("GMIDC")) THEN  
    2043           med_diag%GMIDC%dgsave = .TRUE. 
    2044       ELSE  
    2045           med_diag%GMIDC%dgsave = .FALSE. 
    2046       ENDIF 
    2047       IF  (iom_use("GMEDC")) THEN  
    2048           med_diag%GMEDC%dgsave = .TRUE. 
    2049       ELSE  
    2050           med_diag%GMEDC%dgsave = .FALSE. 
    2051       ENDIF 
    2052       IF  (iom_use("INT_ZMI")) THEN  
    2053           med_diag%INT_ZMI%dgsave = .TRUE. 
    2054       ELSE  
    2055           med_diag%INT_ZMI%dgsave = .FALSE. 
    2056       ENDIF 
    2057       IF  (iom_use("INT_ZME")) THEN  
    2058           med_diag%INT_ZME%dgsave = .TRUE. 
    2059       ELSE  
    2060           med_diag%INT_ZME%dgsave = .FALSE. 
    2061       ENDIF 
    2062       IF  (iom_use("INT_DET")) THEN  
    2063           med_diag%INT_DET%dgsave = .TRUE. 
    2064       ELSE  
    2065           med_diag%INT_DET%dgsave = .FALSE. 
    2066       ENDIF 
    2067       IF  (iom_use("INT_DTC")) THEN  
    2068           med_diag%INT_DTC%dgsave = .TRUE. 
    2069       ELSE  
    2070           med_diag%INT_DTC%dgsave = .FALSE. 
    2071       ENDIF 
    2072       IF  (iom_use("DMS_SURF")) THEN  
    2073           med_diag%DMS_SURF%dgsave = .TRUE. 
    2074       ELSE  
    2075           med_diag%DMS_SURF%dgsave = .FALSE. 
    2076       ENDIF 
    2077       IF  (iom_use("DMS_ANDR")) THEN  
    2078           med_diag%DMS_ANDR%dgsave = .TRUE. 
    2079       ELSE  
    2080           med_diag%DMS_ANDR%dgsave = .FALSE. 
    2081       ENDIF 
    2082       IF  (iom_use("DMS_SIMO")) THEN  
    2083           med_diag%DMS_SIMO%dgsave = .TRUE. 
    2084       ELSE  
    2085           med_diag%DMS_SIMO%dgsave = .FALSE. 
    2086       ENDIF 
    2087       IF  (iom_use("DMS_ARAN")) THEN  
    2088           med_diag%DMS_ARAN%dgsave = .TRUE. 
    2089       ELSE  
    2090           med_diag%DMS_ARAN%dgsave = .FALSE. 
    2091       ENDIF 
    2092       IF  (iom_use("DMS_HALL")) THEN  
    2093           med_diag%DMS_HALL%dgsave = .TRUE. 
    2094       ELSE  
    2095           med_diag%DMS_HALL%dgsave = .FALSE. 
    2096       ENDIF 
    2097       IF  (iom_use("ATM_XCO2")) THEN  
    2098           med_diag%ATM_XCO2%dgsave = .TRUE. 
    2099       ELSE  
    2100           med_diag%ATM_XCO2%dgsave = .FALSE. 
    2101       ENDIF 
    2102       IF  (iom_use("OCN_FCO2")) THEN  
    2103           med_diag%OCN_FCO2%dgsave = .TRUE. 
    2104       ELSE  
    2105           med_diag%OCN_FCO2%dgsave = .FALSE. 
    2106       ENDIF 
    2107       IF  (iom_use("ATM_FCO2")) THEN  
    2108           med_diag%ATM_FCO2%dgsave = .TRUE. 
    2109       ELSE  
    2110           med_diag%ATM_FCO2%dgsave = .FALSE. 
    2111       ENDIF 
    2112       IF  (iom_use("OCN_RHOSW")) THEN  
    2113           med_diag%OCN_RHOSW%dgsave = .TRUE. 
    2114       ELSE  
    2115           med_diag%OCN_RHOSW%dgsave = .FALSE. 
    2116       ENDIF 
    2117       IF  (iom_use("OCN_SCHCO2")) THEN  
    2118           med_diag%OCN_SCHCO2%dgsave = .TRUE. 
    2119       ELSE  
    2120           med_diag%OCN_SCHCO2%dgsave = .FALSE. 
    2121       ENDIF 
    2122       IF  (iom_use("OCN_KWCO2")) THEN  
    2123           med_diag%OCN_KWCO2%dgsave = .TRUE. 
    2124       ELSE  
    2125           med_diag%OCN_KWCO2%dgsave = .FALSE. 
    2126       ENDIF 
    2127       IF  (iom_use("OCN_K0")) THEN  
    2128           med_diag%OCN_K0%dgsave = .TRUE. 
    2129       ELSE  
    2130           med_diag%OCN_K0%dgsave = .FALSE. 
    2131       ENDIF 
    2132       IF  (iom_use("CO2STARAIR")) THEN  
    2133           med_diag%CO2STARAIR%dgsave = .TRUE. 
    2134       ELSE  
    2135           med_diag%CO2STARAIR%dgsave = .FALSE. 
    2136       ENDIF 
    2137       IF  (iom_use("OCN_DPCO2")) THEN  
    2138           med_diag%OCN_DPCO2%dgsave = .TRUE. 
    2139       ELSE  
    2140           med_diag%OCN_DPCO2%dgsave = .FALSE. 
     1057         med_diag%INVTN%dgsave = .TRUE. 
     1058      ELSE  
     1059         med_diag%INVTN%dgsave = .FALSE. 
     1060      ENDIF 
     1061      IF (iom_use("INVTSI")) THEN  
     1062         med_diag%INVTSI%dgsave = .TRUE. 
     1063      ELSE  
     1064         med_diag%INVTSI%dgsave = .FALSE. 
     1065      ENDIF 
     1066      IF (iom_use("INVTFE")) THEN  
     1067         med_diag%INVTFE%dgsave = .TRUE. 
     1068      ELSE  
     1069         med_diag%INVTFE%dgsave = .FALSE. 
     1070      ENDIF 
     1071      IF (iom_use("PRN")) THEN  
     1072         med_diag%PRN%dgsave = .TRUE. 
     1073      ELSE  
     1074         med_diag%PRN%dgsave = .FALSE. 
     1075      ENDIF 
     1076      IF (iom_use("MPN")) THEN  
     1077         med_diag%MPN%dgsave = .TRUE. 
     1078      ELSE  
     1079         med_diag%MPN%dgsave = .FALSE. 
     1080      ENDIF 
     1081      IF (iom_use("PRD")) THEN  
     1082         med_diag%PRD%dgsave = .TRUE. 
     1083      ELSE  
     1084         med_diag%PRD%dgsave = .FALSE. 
     1085      ENDIF 
     1086      IF (iom_use("MPD")) THEN  
     1087         med_diag%MPD%dgsave = .TRUE. 
     1088      ELSE  
     1089         med_diag%MPD%dgsave = .FALSE. 
     1090      ENDIF 
     1091      IF (iom_use("DSED")) THEN  
     1092         med_diag%DSED%dgsave = .TRUE. 
     1093      ELSE  
     1094         med_diag%DSED%dgsave = .FALSE. 
     1095      ENDIF 
     1096      IF (iom_use("OPAL")) THEN  
     1097         med_diag%OPAL%dgsave = .TRUE. 
     1098      ELSE  
     1099         med_diag%OPAL%dgsave = .FALSE. 
     1100      ENDIF 
     1101      IF (iom_use("OPALDISS")) THEN  
     1102         med_diag%OPALDISS%dgsave = .TRUE. 
     1103      ELSE  
     1104         med_diag%OPALDISS%dgsave = .FALSE. 
     1105      ENDIF 
     1106      IF (iom_use("GMIPn")) THEN  
     1107         med_diag%GMIPn%dgsave = .TRUE. 
     1108      ELSE  
     1109         med_diag%GMIPn%dgsave = .FALSE. 
     1110      ENDIF 
     1111      IF (iom_use("GMID")) THEN  
     1112         med_diag%GMID%dgsave = .TRUE. 
     1113      ELSE  
     1114         med_diag%GMID%dgsave = .FALSE. 
     1115      ENDIF 
     1116      IF (iom_use("MZMI")) THEN  
     1117         med_diag%MZMI%dgsave = .TRUE. 
     1118      ELSE  
     1119         med_diag%MZMI%dgsave = .FALSE. 
     1120      ENDIF 
     1121      IF (iom_use("GMEPN")) THEN  
     1122         med_diag%GMEPN%dgsave = .TRUE. 
     1123      ELSE  
     1124         med_diag%GMEPN%dgsave = .FALSE. 
     1125      ENDIF 
     1126      IF (iom_use("GMEPD")) THEN  
     1127         med_diag%GMEPD%dgsave = .TRUE. 
     1128      ELSE  
     1129         med_diag%GMEPD%dgsave = .FALSE. 
     1130      ENDIF 
     1131      IF (iom_use("GMEZMI")) THEN  
     1132         med_diag%GMEZMI%dgsave = .TRUE. 
     1133      ELSE  
     1134         med_diag%GMEZMI%dgsave = .FALSE. 
     1135      ENDIF 
     1136      IF (iom_use("GMED")) THEN  
     1137         med_diag%GMED%dgsave = .TRUE. 
     1138      ELSE  
     1139         med_diag%GMED%dgsave = .FALSE. 
     1140      ENDIF 
     1141      IF (iom_use("MZME")) THEN  
     1142         med_diag%MZME%dgsave = .TRUE. 
     1143      ELSE  
     1144         med_diag%MZME%dgsave = .FALSE. 
     1145      ENDIF 
     1146      IF (iom_use("DEXP")) THEN  
     1147         med_diag%DEXP%dgsave = .TRUE. 
     1148      ELSE  
     1149         med_diag%DEXP%dgsave = .FALSE. 
     1150      ENDIF 
     1151      IF (iom_use("DETN")) THEN  
     1152         med_diag%DETN%dgsave = .TRUE. 
     1153      ELSE  
     1154         med_diag%DETN%dgsave = .FALSE. 
     1155      ENDIF 
     1156      IF (iom_use("MDET")) THEN  
     1157         med_diag%MDET%dgsave = .TRUE. 
     1158      ELSE  
     1159         med_diag%MDET%dgsave = .FALSE. 
     1160      ENDIF 
     1161      IF (iom_use("AEOLIAN")) THEN  
     1162         med_diag%AEOLIAN%dgsave = .TRUE. 
     1163      ELSE  
     1164         med_diag%AEOLIAN%dgsave = .FALSE. 
     1165      ENDIF 
     1166      IF (iom_use("BENTHIC")) THEN  
     1167         med_diag%BENTHIC%dgsave = .TRUE. 
     1168      ELSE  
     1169         med_diag%BENTHIC%dgsave = .FALSE. 
     1170      ENDIF 
     1171      IF (iom_use("SCAVENGE")) THEN  
     1172         med_diag%SCAVENGE%dgsave = .TRUE. 
     1173      ELSE  
     1174         med_diag%SCAVENGE%dgsave = .FALSE. 
     1175      ENDIF 
     1176      IF (iom_use("PN_JLIM")) THEN  
     1177         med_diag%PN_JLIM%dgsave = .TRUE. 
     1178      ELSE  
     1179         med_diag%PN_JLIM%dgsave = .FALSE. 
     1180      ENDIF 
     1181      IF (iom_use("PN_NLIM")) THEN  
     1182         med_diag%PN_NLIM%dgsave = .TRUE. 
     1183      ELSE  
     1184         med_diag%PN_NLIM%dgsave = .FALSE. 
     1185      ENDIF 
     1186      IF (iom_use("PN_FELIM")) THEN  
     1187         med_diag%PN_FELIM%dgsave = .TRUE. 
     1188      ELSE  
     1189         med_diag%PN_FELIM%dgsave = .FALSE. 
     1190      ENDIF 
     1191      IF (iom_use("PD_JLIM")) THEN  
     1192         med_diag%PD_JLIM%dgsave = .TRUE. 
     1193      ELSE  
     1194         med_diag%PD_JLIM%dgsave = .FALSE. 
     1195      ENDIF 
     1196      IF (iom_use("PD_NLIM")) THEN  
     1197         med_diag%PD_NLIM%dgsave = .TRUE. 
     1198      ELSE  
     1199         med_diag%PD_NLIM%dgsave = .FALSE. 
     1200      ENDIF 
     1201      IF (iom_use("PD_FELIM")) THEN  
     1202         med_diag%PD_FELIM%dgsave = .TRUE. 
     1203      ELSE  
     1204         med_diag%PD_FELIM%dgsave = .FALSE. 
     1205      ENDIF 
     1206      IF (iom_use("PD_SILIM")) THEN  
     1207         med_diag%PD_SILIM%dgsave = .TRUE. 
     1208      ELSE  
     1209         med_diag%PD_SILIM%dgsave = .FALSE. 
     1210      ENDIF 
     1211      IF (iom_use("PDSILIM2")) THEN  
     1212         med_diag%PDSILIM2%dgsave = .TRUE. 
     1213      ELSE  
     1214         med_diag%PDSILIM2%dgsave = .FALSE. 
     1215      ENDIF 
     1216      IF (iom_use("SDT__100")) THEN  
     1217         med_diag%SDT__100%dgsave = .TRUE. 
     1218      ELSE  
     1219         med_diag%SDT__100%dgsave = .FALSE. 
     1220      ENDIF 
     1221      IF (iom_use("SDT__200")) THEN  
     1222         med_diag%SDT__200%dgsave = .TRUE. 
     1223      ELSE  
     1224         med_diag%SDT__200%dgsave = .FALSE. 
     1225      ENDIF 
     1226      IF (iom_use("SDT__500")) THEN  
     1227         med_diag%SDT__500%dgsave = .TRUE. 
     1228      ELSE  
     1229         med_diag%SDT__500%dgsave = .FALSE. 
     1230      ENDIF 
     1231      IF (iom_use("SDT_1000")) THEN  
     1232         med_diag%SDT_1000%dgsave = .TRUE. 
     1233      ELSE  
     1234         med_diag%SDT_1000%dgsave = .FALSE. 
     1235      ENDIF 
     1236      IF (iom_use("TOTREG_N")) THEN  
     1237         med_diag%TOTREG_N%dgsave = .TRUE. 
     1238      ELSE  
     1239         med_diag%TOTREG_N%dgsave = .FALSE. 
     1240      ENDIF 
     1241      IF (iom_use("TOTRG_SI")) THEN  
     1242         med_diag%TOTRG_SI%dgsave = .TRUE. 
     1243      ELSE  
     1244         med_diag%TOTRG_SI%dgsave = .FALSE. 
     1245      ENDIF 
     1246      IF (iom_use("REG__100")) THEN  
     1247         med_diag%REG__100%dgsave = .TRUE. 
     1248      ELSE  
     1249         med_diag%REG__100%dgsave = .FALSE. 
     1250      ENDIF 
     1251      IF (iom_use("REG__200")) THEN  
     1252         med_diag%REG__200%dgsave = .TRUE. 
     1253      ELSE  
     1254         med_diag%REG__200%dgsave = .FALSE. 
     1255      ENDIF 
     1256      IF (iom_use("REG__500")) THEN  
     1257         med_diag%REG__500%dgsave = .TRUE. 
     1258      ELSE  
     1259         med_diag%REG__500%dgsave = .FALSE. 
     1260      ENDIF 
     1261      IF (iom_use("REG_1000")) THEN  
     1262         med_diag%REG_1000%dgsave = .TRUE. 
     1263      ELSE  
     1264         med_diag%REG_1000%dgsave = .FALSE. 
     1265      ENDIF 
     1266      IF (iom_use("FASTN")) THEN  
     1267         med_diag%FASTN%dgsave = .TRUE. 
     1268      ELSE  
     1269         med_diag%FASTN%dgsave = .FALSE. 
     1270      ENDIF 
     1271      IF (iom_use("FASTSI")) THEN  
     1272         med_diag%FASTSI%dgsave = .TRUE. 
     1273      ELSE  
     1274         med_diag%FASTSI%dgsave = .FALSE. 
     1275      ENDIF 
     1276      IF (iom_use("FASTFE")) THEN  
     1277         med_diag%FASTFE%dgsave = .TRUE. 
     1278      ELSE  
     1279         med_diag%FASTFE%dgsave = .FALSE. 
     1280      ENDIF 
     1281      IF (iom_use("FASTC")) THEN  
     1282         med_diag%FASTC%dgsave = .TRUE. 
     1283      ELSE  
     1284         med_diag%FASTC%dgsave = .FALSE. 
     1285      ENDIF 
     1286      IF (iom_use("FASTCA")) THEN  
     1287         med_diag%FASTCA%dgsave = .TRUE. 
     1288      ELSE  
     1289         med_diag%FASTCA%dgsave = .FALSE. 
     1290      ENDIF 
     1291      IF (iom_use("FDT__100")) THEN  
     1292         med_diag%FDT__100%dgsave = .TRUE. 
     1293      ELSE  
     1294         med_diag%FDT__100%dgsave = .FALSE. 
     1295      ENDIF 
     1296      IF (iom_use("FDT__200")) THEN  
     1297         med_diag%FDT__200%dgsave = .TRUE. 
     1298      ELSE  
     1299         med_diag%FDT__200%dgsave = .FALSE. 
     1300      ENDIF 
     1301      IF (iom_use("FDT__500")) THEN  
     1302         med_diag%FDT__500%dgsave = .TRUE. 
     1303      ELSE  
     1304         med_diag%FDT__500%dgsave = .FALSE. 
     1305      ENDIF 
     1306      IF (iom_use("FDT_1000")) THEN  
     1307         med_diag%FDT_1000%dgsave = .TRUE. 
     1308      ELSE  
     1309         med_diag%FDT_1000%dgsave = .FALSE. 
     1310      ENDIF 
     1311      IF (iom_use("RG__100F")) THEN  
     1312         med_diag%RG__100F%dgsave = .TRUE. 
     1313      ELSE  
     1314         med_diag%RG__100F%dgsave = .FALSE. 
     1315      ENDIF 
     1316      IF (iom_use("RG__200F")) THEN  
     1317         med_diag%RG__200F%dgsave = .TRUE. 
     1318      ELSE  
     1319         med_diag%RG__200F%dgsave = .FALSE. 
     1320      ENDIF 
     1321      IF (iom_use("RG__500F")) THEN  
     1322         med_diag%RG__500F%dgsave = .TRUE. 
     1323      ELSE  
     1324         med_diag%RG__500F%dgsave = .FALSE. 
     1325      ENDIF 
     1326      IF (iom_use("RG_1000F")) THEN  
     1327         med_diag%RG_1000F%dgsave = .TRUE. 
     1328      ELSE  
     1329         med_diag%RG_1000F%dgsave = .FALSE. 
     1330      ENDIF 
     1331      IF (iom_use("FDS__100")) THEN  
     1332         med_diag%FDS__100%dgsave = .TRUE. 
     1333      ELSE  
     1334         med_diag%FDS__100%dgsave = .FALSE. 
     1335      ENDIF 
     1336      IF (iom_use("FDS__200")) THEN  
     1337         med_diag%FDS__200%dgsave = .TRUE. 
     1338      ELSE  
     1339         med_diag%FDS__200%dgsave = .FALSE. 
     1340      ENDIF 
     1341      IF (iom_use("FDS__500")) THEN  
     1342         med_diag%FDS__500%dgsave = .TRUE. 
     1343      ELSE  
     1344         med_diag%FDS__500%dgsave = .FALSE. 
     1345      ENDIF 
     1346      IF (iom_use("FDS_1000")) THEN  
     1347         med_diag%FDS_1000%dgsave = .TRUE. 
     1348      ELSE  
     1349         med_diag%FDS_1000%dgsave = .FALSE. 
     1350      ENDIF 
     1351      IF (iom_use("RGS_100F")) THEN  
     1352         med_diag%RGS_100F%dgsave = .TRUE. 
     1353      ELSE  
     1354         med_diag%RGS_100F%dgsave = .FALSE. 
     1355      ENDIF 
     1356      IF (iom_use("RGS_200F")) THEN  
     1357         med_diag%RGS_200F%dgsave = .TRUE. 
     1358      ELSE  
     1359         med_diag%RGS_200F%dgsave = .FALSE. 
     1360      ENDIF 
     1361      IF (iom_use("RGS_500F")) THEN  
     1362         med_diag%RGS_500F%dgsave = .TRUE. 
     1363      ELSE  
     1364         med_diag%RGS_500F%dgsave = .FALSE. 
     1365      ENDIF 
     1366      IF (iom_use("RGS1000F")) THEN  
     1367         med_diag%RGS1000F%dgsave = .TRUE. 
     1368      ELSE  
     1369         med_diag%RGS1000F%dgsave = .FALSE. 
     1370      ENDIF 
     1371      IF (iom_use("REMINN")) THEN  
     1372         med_diag%REMINN%dgsave = .TRUE. 
     1373      ELSE  
     1374         med_diag%REMINN%dgsave = .FALSE. 
     1375      ENDIF 
     1376      IF (iom_use("REMINSI")) THEN  
     1377         med_diag%REMINSI%dgsave = .TRUE. 
     1378      ELSE  
     1379         med_diag%REMINSI%dgsave = .FALSE. 
     1380      ENDIF 
     1381      IF (iom_use("REMINFE")) THEN  
     1382         med_diag%REMINFE%dgsave = .TRUE. 
     1383      ELSE  
     1384         med_diag%REMINFE%dgsave = .FALSE. 
     1385      ENDIF 
     1386      IF (iom_use("REMINC")) THEN  
     1387         med_diag%REMINC%dgsave = .TRUE. 
     1388      ELSE  
     1389         med_diag%REMINC%dgsave = .FALSE. 
     1390      ENDIF 
     1391      IF (iom_use("REMINCA")) THEN  
     1392         med_diag%REMINCA%dgsave = .TRUE. 
     1393      ELSE  
     1394         med_diag%REMINCA%dgsave = .FALSE. 
     1395      ENDIF 
     1396      IF (iom_use("SEAFLRN")) THEN  
     1397         med_diag%SEAFLRN%dgsave = .TRUE. 
     1398      ELSE  
     1399         med_diag%SEAFLRN%dgsave = .FALSE. 
     1400      ENDIF 
     1401      IF (iom_use("SEAFLRSI")) THEN  
     1402         med_diag%SEAFLRSI%dgsave = .TRUE. 
     1403      ELSE  
     1404         med_diag%SEAFLRSI%dgsave = .FALSE. 
     1405      ENDIF 
     1406      IF (iom_use("SEAFLRFE")) THEN  
     1407         med_diag%SEAFLRFE%dgsave = .TRUE. 
     1408      ELSE  
     1409         med_diag%SEAFLRFE%dgsave = .FALSE. 
     1410      ENDIF 
     1411      IF (iom_use("SEAFLRC")) THEN  
     1412         med_diag%SEAFLRC%dgsave = .TRUE. 
     1413      ELSE  
     1414         med_diag%SEAFLRC%dgsave = .FALSE. 
     1415      ENDIF 
     1416      IF (iom_use("SEAFLRCA")) THEN  
     1417         med_diag%SEAFLRCA%dgsave = .TRUE. 
     1418      ELSE  
     1419         med_diag%SEAFLRCA%dgsave = .FALSE. 
     1420      ENDIF 
     1421      IF (iom_use("MED_QSR")) THEN  
     1422         med_diag%MED_QSR%dgsave = .TRUE. 
     1423      ELSE  
     1424         med_diag%MED_QSR%dgsave = .FALSE. 
     1425      ENDIF 
     1426      IF (iom_use("MED_XPAR")) THEN  
     1427         med_diag%MED_XPAR%dgsave = .TRUE. 
     1428      ELSE  
     1429         med_diag%MED_XPAR%dgsave = .FALSE. 
     1430      ENDIF 
     1431      IF (iom_use("INTFLX_N")) THEN  
     1432         med_diag%INTFLX_N%dgsave = .TRUE. 
     1433      ELSE  
     1434         med_diag%INTFLX_N%dgsave = .FALSE. 
     1435      ENDIF 
     1436      IF (iom_use("INTFLX_SI")) THEN  
     1437         med_diag%INTFLX_SI%dgsave = .TRUE. 
     1438      ELSE  
     1439         med_diag%INTFLX_SI%dgsave = .FALSE. 
     1440      ENDIF 
     1441      IF (iom_use("INTFLX_FE")) THEN  
     1442         med_diag%INTFLX_FE%dgsave = .TRUE. 
     1443      ELSE  
     1444         med_diag%INTFLX_FE%dgsave = .FALSE. 
     1445      ENDIF 
     1446      IF (iom_use("INT_PN")) THEN  
     1447         med_diag%INT_PN%dgsave = .TRUE. 
     1448      ELSE  
     1449         med_diag%INT_PN%dgsave = .FALSE. 
     1450      ENDIF 
     1451      IF (iom_use("INT_PD")) THEN  
     1452         med_diag%INT_PD%dgsave = .TRUE. 
     1453      ELSE  
     1454         med_diag%INT_PD%dgsave = .FALSE. 
     1455      ENDIF 
     1456      IF (iom_use("ML_PRN")) THEN  
     1457         med_diag%ML_PRN%dgsave = .TRUE. 
     1458      ELSE  
     1459         med_diag%ML_PRN%dgsave = .FALSE. 
     1460      ENDIF 
     1461      IF (iom_use("ML_PRD")) THEN  
     1462         med_diag%ML_PRD%dgsave = .TRUE. 
     1463      ELSE  
     1464         med_diag%ML_PRD%dgsave = .FALSE. 
     1465      ENDIF 
     1466      IF (iom_use("OCAL_CCD")) THEN  
     1467         med_diag%OCAL_CCD%dgsave = .TRUE. 
     1468      ELSE  
     1469         med_diag%OCAL_CCD%dgsave = .FALSE. 
     1470      ENDIF 
     1471      IF (iom_use("OCAL_LVL")) THEN  
     1472         med_diag%OCAL_LVL%dgsave = .TRUE. 
     1473      ELSE  
     1474         med_diag%OCAL_LVL%dgsave = .FALSE. 
     1475      ENDIF 
     1476      IF (iom_use("FE_0000")) THEN  
     1477         med_diag%FE_0000%dgsave = .TRUE. 
     1478      ELSE  
     1479         med_diag%FE_0000%dgsave = .FALSE. 
     1480      ENDIF 
     1481      IF (iom_use("FE_0100")) THEN  
     1482         med_diag%FE_0100%dgsave = .TRUE. 
     1483      ELSE  
     1484         med_diag%FE_0100%dgsave = .FALSE. 
     1485      ENDIF 
     1486      IF (iom_use("FE_0200")) THEN  
     1487         med_diag%FE_0200%dgsave = .TRUE. 
     1488      ELSE  
     1489         med_diag%FE_0200%dgsave = .FALSE. 
     1490      ENDIF 
     1491      IF (iom_use("FE_0500")) THEN  
     1492         med_diag%FE_0500%dgsave = .TRUE. 
     1493      ELSE  
     1494         med_diag%FE_0500%dgsave = .FALSE. 
     1495      ENDIF 
     1496      IF (iom_use("FE_1000")) THEN  
     1497         med_diag%FE_1000%dgsave = .TRUE. 
     1498      ELSE  
     1499         med_diag%FE_1000%dgsave = .FALSE. 
     1500      ENDIF 
     1501      IF (iom_use("MED_XZE")) THEN  
     1502         med_diag%MED_XZE%dgsave = .TRUE. 
     1503      ELSE  
     1504         med_diag%MED_XZE%dgsave = .FALSE. 
     1505      ENDIF 
     1506      IF (iom_use("WIND")) THEN  
     1507         med_diag%WIND%dgsave = .TRUE. 
     1508      ELSE  
     1509         med_diag%WIND%dgsave = .FALSE. 
     1510      ENDIF 
     1511      IF (iom_use("ATM_PCO2")) THEN  
     1512         med_diag%ATM_PCO2%dgsave = .TRUE. 
     1513      ELSE  
     1514         med_diag%ATM_PCO2%dgsave = .FALSE. 
     1515      ENDIF 
     1516      IF (iom_use("OCN_PH")) THEN  
     1517         med_diag%OCN_PH%dgsave = .TRUE. 
     1518      ELSE  
     1519         med_diag%OCN_PH%dgsave = .FALSE. 
     1520      ENDIF 
     1521      IF (iom_use("OCN_PCO2")) THEN  
     1522         med_diag%OCN_PCO2%dgsave = .TRUE. 
     1523      ELSE  
     1524         med_diag%OCN_PCO2%dgsave = .FALSE. 
     1525      ENDIF 
     1526      IF (iom_use("OCNH2CO3")) THEN  
     1527         med_diag%OCNH2CO3%dgsave = .TRUE. 
     1528      ELSE  
     1529         med_diag%OCNH2CO3%dgsave = .FALSE. 
     1530      ENDIF 
     1531      IF (iom_use("OCN_HCO3")) THEN  
     1532         med_diag%OCN_HCO3%dgsave = .TRUE. 
     1533      ELSE  
     1534         med_diag%OCN_HCO3%dgsave = .FALSE. 
     1535      ENDIF 
     1536      IF (iom_use("OCN_CO3")) THEN  
     1537         med_diag%OCN_CO3%dgsave = .TRUE. 
     1538      ELSE  
     1539         med_diag%OCN_CO3%dgsave = .FALSE. 
     1540      ENDIF 
     1541      IF (iom_use("CO2FLUX")) THEN  
     1542         med_diag%CO2FLUX%dgsave = .TRUE. 
     1543      ELSE  
     1544         med_diag%CO2FLUX%dgsave = .FALSE. 
     1545      ENDIF 
     1546      IF (iom_use("OM_CAL")) THEN  
     1547         med_diag%OM_CAL%dgsave = .TRUE. 
     1548      ELSE  
     1549         med_diag%OM_CAL%dgsave = .FALSE. 
     1550      ENDIF 
     1551      IF (iom_use("OM_ARG")) THEN  
     1552         med_diag%OM_ARG%dgsave = .TRUE. 
     1553      ELSE  
     1554         med_diag%OM_ARG%dgsave = .FALSE. 
     1555      ENDIF 
     1556      IF (iom_use("TCO2")) THEN  
     1557         med_diag%TCO2%dgsave = .TRUE. 
     1558      ELSE  
     1559         med_diag%TCO2%dgsave = .FALSE. 
     1560      ENDIF 
     1561      IF (iom_use("TALK")) THEN  
     1562         med_diag%TALK%dgsave = .TRUE. 
     1563      ELSE  
     1564         med_diag%TALK%dgsave = .FALSE. 
     1565      ENDIF 
     1566      IF (iom_use("KW660")) THEN  
     1567         med_diag%KW660%dgsave = .TRUE. 
     1568      ELSE  
     1569         med_diag%KW660%dgsave = .FALSE. 
     1570      ENDIF 
     1571      IF (iom_use("ATM_PP0")) THEN  
     1572         med_diag%ATM_PP0%dgsave = .TRUE. 
     1573      ELSE  
     1574         med_diag%ATM_PP0%dgsave = .FALSE. 
     1575      ENDIF 
     1576      IF (iom_use("O2FLUX")) THEN  
     1577         med_diag%O2FLUX%dgsave = .TRUE. 
     1578      ELSE  
     1579         med_diag%O2FLUX%dgsave = .FALSE. 
     1580      ENDIF 
     1581      IF (iom_use("O2SAT")) THEN  
     1582         med_diag%O2SAT%dgsave = .TRUE. 
     1583      ELSE  
     1584         med_diag%O2SAT%dgsave = .FALSE. 
     1585      ENDIF 
     1586      IF (iom_use("CAL_CCD")) THEN  
     1587         med_diag%CAL_CCD%dgsave = .TRUE. 
     1588      ELSE  
     1589         med_diag%CAL_CCD%dgsave = .FALSE. 
     1590      ENDIF 
     1591      IF (iom_use("ARG_CCD")) THEN  
     1592         med_diag%ARG_CCD%dgsave = .TRUE. 
     1593      ELSE  
     1594         med_diag%ARG_CCD%dgsave = .FALSE. 
     1595      ENDIF 
     1596      IF (iom_use("SFR_OCAL")) THEN  
     1597         med_diag%SFR_OCAL%dgsave = .TRUE. 
     1598      ELSE  
     1599         med_diag%SFR_OCAL%dgsave = .FALSE. 
     1600      ENDIF 
     1601      IF (iom_use("SFR_OARG")) THEN  
     1602         med_diag%SFR_OARG%dgsave = .TRUE. 
     1603      ELSE  
     1604         med_diag%SFR_OARG%dgsave = .FALSE. 
     1605      ENDIF 
     1606      IF (iom_use("N_PROD")) THEN  
     1607         med_diag%N_PROD%dgsave = .TRUE. 
     1608      ELSE  
     1609         med_diag%N_PROD%dgsave = .FALSE. 
     1610      ENDIF 
     1611      IF (iom_use("N_CONS")) THEN  
     1612         med_diag%N_CONS%dgsave = .TRUE. 
     1613      ELSE  
     1614         med_diag%N_CONS%dgsave = .FALSE. 
     1615      ENDIF 
     1616      IF (iom_use("C_PROD")) THEN  
     1617         med_diag%C_PROD%dgsave = .TRUE. 
     1618      ELSE  
     1619         med_diag%C_PROD%dgsave = .FALSE. 
     1620      ENDIF 
     1621      IF (iom_use("C_CONS")) THEN  
     1622         med_diag%C_CONS%dgsave = .TRUE. 
     1623      ELSE  
     1624         med_diag%C_CONS%dgsave = .FALSE. 
     1625      ENDIF 
     1626      IF (iom_use("O2_PROD")) THEN  
     1627         med_diag%O2_PROD%dgsave = .TRUE. 
     1628      ELSE  
     1629         med_diag%O2_PROD%dgsave = .FALSE. 
     1630      ENDIF 
     1631      IF (iom_use("O2_CONS")) THEN  
     1632         med_diag%O2_CONS%dgsave = .TRUE. 
     1633      ELSE  
     1634         med_diag%O2_CONS%dgsave = .FALSE. 
     1635      ENDIF 
     1636      IF (iom_use("O2_ANOX")) THEN  
     1637         med_diag%O2_ANOX%dgsave = .TRUE. 
     1638      ELSE  
     1639         med_diag%O2_ANOX%dgsave = .FALSE. 
     1640      ENDIF 
     1641      IF (iom_use("RR_0100")) THEN  
     1642         med_diag%RR_0100%dgsave = .TRUE. 
     1643      ELSE  
     1644         med_diag%RR_0100%dgsave = .FALSE. 
     1645      ENDIF 
     1646      IF (iom_use("RR_0500")) THEN  
     1647         med_diag%RR_0500%dgsave = .TRUE. 
     1648      ELSE  
     1649         med_diag%RR_0500%dgsave = .FALSE. 
     1650      ENDIF 
     1651      IF (iom_use("RR_1000")) THEN  
     1652         med_diag%RR_1000%dgsave = .TRUE. 
     1653      ELSE  
     1654         med_diag%RR_1000%dgsave = .FALSE. 
     1655      ENDIF 
     1656      IF (iom_use("IBEN_N")) THEN  
     1657         med_diag%IBEN_N%dgsave = .TRUE. 
     1658      ELSE  
     1659         med_diag%IBEN_N%dgsave = .FALSE. 
     1660      ENDIF 
     1661      IF (iom_use("IBEN_FE")) THEN  
     1662         med_diag%IBEN_FE%dgsave = .TRUE. 
     1663      ELSE  
     1664         med_diag%IBEN_FE%dgsave = .FALSE. 
     1665      ENDIF 
     1666      IF (iom_use("IBEN_C")) THEN  
     1667         med_diag%IBEN_C%dgsave = .TRUE. 
     1668      ELSE  
     1669         med_diag%IBEN_C%dgsave = .FALSE. 
     1670      ENDIF 
     1671      IF (iom_use("IBEN_SI")) THEN  
     1672         med_diag%IBEN_SI%dgsave = .TRUE. 
     1673      ELSE  
     1674         med_diag%IBEN_SI%dgsave = .FALSE. 
     1675      ENDIF 
     1676      IF (iom_use("IBEN_CA")) THEN  
     1677         med_diag%IBEN_CA%dgsave = .TRUE. 
     1678      ELSE  
     1679         med_diag%IBEN_CA%dgsave = .FALSE. 
     1680      ENDIF 
     1681      IF (iom_use("OBEN_N")) THEN  
     1682         med_diag%OBEN_N%dgsave = .TRUE. 
     1683      ELSE  
     1684         med_diag%OBEN_N%dgsave = .FALSE. 
     1685      ENDIF 
     1686      IF (iom_use("OBEN_FE")) THEN  
     1687         med_diag%OBEN_FE%dgsave = .TRUE. 
     1688      ELSE  
     1689         med_diag%OBEN_FE%dgsave = .FALSE. 
     1690      ENDIF 
     1691      IF (iom_use("OBEN_C")) THEN  
     1692         med_diag%OBEN_C%dgsave = .TRUE. 
     1693      ELSE  
     1694         med_diag%OBEN_C%dgsave = .FALSE. 
     1695      ENDIF 
     1696      IF (iom_use("OBEN_SI")) THEN  
     1697         med_diag%OBEN_SI%dgsave = .TRUE. 
     1698      ELSE  
     1699         med_diag%OBEN_SI%dgsave = .FALSE. 
     1700      ENDIF 
     1701      IF (iom_use("OBEN_CA")) THEN  
     1702         med_diag%OBEN_CA%dgsave = .TRUE. 
     1703      ELSE  
     1704         med_diag%OBEN_CA%dgsave = .FALSE. 
     1705      ENDIF 
     1706      IF (iom_use("BEN_N")) THEN  
     1707         med_diag%BEN_N%dgsave = .TRUE. 
     1708      ELSE  
     1709         med_diag%BEN_N%dgsave = .FALSE. 
     1710      ENDIF 
     1711      IF (iom_use("BEN_FE")) THEN  
     1712         med_diag%BEN_FE%dgsave = .TRUE. 
     1713      ELSE  
     1714         med_diag%BEN_FE%dgsave = .FALSE. 
     1715      ENDIF 
     1716      IF (iom_use("BEN_C")) THEN  
     1717         med_diag%BEN_C%dgsave = .TRUE. 
     1718      ELSE  
     1719         med_diag%BEN_C%dgsave = .FALSE. 
     1720      ENDIF 
     1721      IF (iom_use("BEN_SI")) THEN  
     1722         med_diag%BEN_SI%dgsave = .TRUE. 
     1723      ELSE  
     1724         med_diag%BEN_SI%dgsave = .FALSE. 
     1725      ENDIF 
     1726      IF (iom_use("BEN_CA")) THEN  
     1727         med_diag%BEN_CA%dgsave = .TRUE. 
     1728      ELSE  
     1729         med_diag%BEN_CA%dgsave = .FALSE. 
     1730      ENDIF 
     1731      IF (iom_use("RUNOFF")) THEN  
     1732         med_diag%RUNOFF%dgsave = .TRUE. 
     1733      ELSE  
     1734         med_diag%RUNOFF%dgsave = .FALSE. 
     1735      ENDIF 
     1736      IF (iom_use("RIV_N")) THEN  
     1737         med_diag%RIV_N%dgsave = .TRUE. 
     1738      ELSE  
     1739         med_diag%RIV_N%dgsave = .FALSE. 
     1740      ENDIF 
     1741      IF (iom_use("RIV_SI")) THEN  
     1742         med_diag%RIV_SI%dgsave = .TRUE. 
     1743      ELSE  
     1744         med_diag%RIV_SI%dgsave = .FALSE. 
     1745      ENDIF 
     1746      IF (iom_use("RIV_C")) THEN  
     1747         med_diag%RIV_C%dgsave = .TRUE. 
     1748      ELSE  
     1749         med_diag%RIV_C%dgsave = .FALSE. 
     1750      ENDIF 
     1751      IF (iom_use("RIV_ALK")) THEN  
     1752         med_diag%RIV_ALK%dgsave = .TRUE. 
     1753      ELSE  
     1754         med_diag%RIV_ALK%dgsave = .FALSE. 
     1755      ENDIF 
     1756      IF (iom_use("DETC")) THEN  
     1757         med_diag%DETC%dgsave = .TRUE. 
     1758      ELSE  
     1759         med_diag%DETC%dgsave = .FALSE. 
     1760      ENDIF 
     1761      IF (iom_use("SDC__100")) THEN  
     1762         med_diag%SDC__100%dgsave = .TRUE. 
     1763      ELSE  
     1764         med_diag%SDC__100%dgsave = .FALSE. 
     1765      ENDIF 
     1766      IF (iom_use("SDC__200")) THEN  
     1767         med_diag%SDC__200%dgsave = .TRUE. 
     1768      ELSE  
     1769         med_diag%SDC__200%dgsave = .FALSE. 
     1770      ENDIF 
     1771      IF (iom_use("SDC__500")) THEN  
     1772         med_diag%SDC__500%dgsave = .TRUE. 
     1773      ELSE  
     1774         med_diag%SDC__500%dgsave = .FALSE. 
     1775      ENDIF 
     1776      IF (iom_use("SDC_1000")) THEN  
     1777         med_diag%SDC_1000%dgsave = .TRUE. 
     1778      ELSE  
     1779         med_diag%SDC_1000%dgsave = .FALSE. 
     1780      ENDIF 
     1781      IF (iom_use("INVTC")) THEN  
     1782         med_diag%INVTC%dgsave = .TRUE. 
     1783      ELSE  
     1784         med_diag%INVTC%dgsave = .FALSE. 
     1785      ENDIF 
     1786      IF (iom_use("INVTALK")) THEN  
     1787         med_diag%INVTALK%dgsave = .TRUE. 
     1788      ELSE  
     1789         med_diag%INVTALK%dgsave = .FALSE. 
     1790      ENDIF 
     1791      IF (iom_use("INVTO2")) THEN  
     1792         med_diag%INVTO2%dgsave = .TRUE. 
     1793      ELSE  
     1794         med_diag%INVTO2%dgsave = .FALSE. 
     1795      ENDIF 
     1796      IF (iom_use("LYSO_CA")) THEN  
     1797         med_diag%LYSO_CA%dgsave = .TRUE. 
     1798      ELSE  
     1799         med_diag%LYSO_CA%dgsave = .FALSE. 
     1800      ENDIF 
     1801      IF (iom_use("COM_RESP")) THEN  
     1802         med_diag%COM_RESP%dgsave = .TRUE. 
     1803      ELSE  
     1804         med_diag%COM_RESP%dgsave = .FALSE. 
     1805      ENDIF 
     1806      IF (iom_use("PN_LLOSS")) THEN  
     1807         med_diag%PN_LLOSS%dgsave = .TRUE. 
     1808      ELSE  
     1809         med_diag%PN_LLOSS%dgsave = .FALSE. 
     1810      ENDIF 
     1811      IF (iom_use("PD_LLOSS")) THEN  
     1812         med_diag%PD_LLOSS%dgsave = .TRUE. 
     1813      ELSE  
     1814         med_diag%PD_LLOSS%dgsave = .FALSE. 
     1815      ENDIF 
     1816      IF (iom_use("ZI_LLOSS")) THEN  
     1817         med_diag%ZI_LLOSS%dgsave = .TRUE. 
     1818      ELSE  
     1819         med_diag%ZI_LLOSS%dgsave = .FALSE. 
     1820      ENDIF 
     1821      IF (iom_use("ZE_LLOSS")) THEN  
     1822         med_diag%ZE_LLOSS%dgsave = .TRUE. 
     1823      ELSE  
     1824         med_diag%ZE_LLOSS%dgsave = .FALSE. 
     1825      ENDIF 
     1826      IF (iom_use("ZI_MES_N")) THEN  
     1827         med_diag%ZI_MES_N%dgsave = .TRUE. 
     1828      ELSE  
     1829         med_diag%ZI_MES_N%dgsave = .FALSE. 
     1830      ENDIF 
     1831      IF (iom_use("ZI_MES_D")) THEN  
     1832         med_diag%ZI_MES_D%dgsave = .TRUE. 
     1833      ELSE  
     1834         med_diag%ZI_MES_D%dgsave = .FALSE. 
     1835      ENDIF 
     1836      IF (iom_use("ZI_MES_C")) THEN  
     1837         med_diag%ZI_MES_C%dgsave = .TRUE. 
     1838      ELSE  
     1839         med_diag%ZI_MES_C%dgsave = .FALSE. 
     1840      ENDIF 
     1841      IF (iom_use("ZI_MESDC")) THEN  
     1842         med_diag%ZI_MESDC%dgsave = .TRUE. 
     1843      ELSE  
     1844         med_diag%ZI_MESDC%dgsave = .FALSE. 
     1845      ENDIF 
     1846      IF (iom_use("ZI_EXCR")) THEN  
     1847         med_diag%ZI_EXCR%dgsave = .TRUE. 
     1848      ELSE  
     1849         med_diag%ZI_EXCR%dgsave = .FALSE. 
     1850      ENDIF 
     1851      IF (iom_use("ZI_RESP")) THEN  
     1852         med_diag%ZI_RESP%dgsave = .TRUE. 
     1853      ELSE  
     1854         med_diag%ZI_RESP%dgsave = .FALSE. 
     1855      ENDIF 
     1856      IF (iom_use("ZI_GROW")) THEN  
     1857         med_diag%ZI_GROW%dgsave = .TRUE. 
     1858      ELSE  
     1859         med_diag%ZI_GROW%dgsave = .FALSE. 
     1860      ENDIF 
     1861      IF (iom_use("ZE_MES_N")) THEN  
     1862         med_diag%ZE_MES_N%dgsave = .TRUE. 
     1863      ELSE  
     1864         med_diag%ZE_MES_N%dgsave = .FALSE. 
     1865      ENDIF 
     1866      IF (iom_use("ZE_MES_D")) THEN  
     1867         med_diag%ZE_MES_D%dgsave = .TRUE. 
     1868      ELSE  
     1869         med_diag%ZE_MES_D%dgsave = .FALSE. 
     1870      ENDIF 
     1871      IF (iom_use("ZE_MES_C")) THEN  
     1872         med_diag%ZE_MES_C%dgsave = .TRUE. 
     1873      ELSE  
     1874         med_diag%ZE_MES_C%dgsave = .FALSE. 
     1875      ENDIF 
     1876      IF (iom_use("ZE_MESDC")) THEN  
     1877         med_diag%ZE_MESDC%dgsave = .TRUE. 
     1878      ELSE  
     1879         med_diag%ZE_MESDC%dgsave = .FALSE. 
     1880      ENDIF 
     1881      IF (iom_use("ZE_EXCR")) THEN  
     1882         med_diag%ZE_EXCR%dgsave = .TRUE. 
     1883      ELSE  
     1884         med_diag%ZE_EXCR%dgsave = .FALSE. 
     1885      ENDIF 
     1886      IF (iom_use("ZE_RESP")) THEN  
     1887         med_diag%ZE_RESP%dgsave = .TRUE. 
     1888      ELSE  
     1889         med_diag%ZE_RESP%dgsave = .FALSE. 
     1890      ENDIF 
     1891      IF (iom_use("ZE_GROW")) THEN  
     1892         med_diag%ZE_GROW%dgsave = .TRUE. 
     1893      ELSE  
     1894         med_diag%ZE_GROW%dgsave = .FALSE. 
     1895      ENDIF 
     1896      IF (iom_use("MDETC")) THEN  
     1897         med_diag%MDETC%dgsave = .TRUE. 
     1898      ELSE  
     1899         med_diag%MDETC%dgsave = .FALSE. 
     1900      ENDIF 
     1901      IF (iom_use("GMIDC")) THEN  
     1902         med_diag%GMIDC%dgsave = .TRUE. 
     1903      ELSE  
     1904         med_diag%GMIDC%dgsave = .FALSE. 
     1905      ENDIF 
     1906      IF (iom_use("GMEDC")) THEN  
     1907         med_diag%GMEDC%dgsave = .TRUE. 
     1908      ELSE  
     1909         med_diag%GMEDC%dgsave = .FALSE. 
     1910      ENDIF 
     1911      IF (iom_use("INT_ZMI")) THEN  
     1912         med_diag%INT_ZMI%dgsave = .TRUE. 
     1913      ELSE  
     1914         med_diag%INT_ZMI%dgsave = .FALSE. 
     1915      ENDIF 
     1916      IF (iom_use("INT_ZME")) THEN  
     1917         med_diag%INT_ZME%dgsave = .TRUE. 
     1918      ELSE  
     1919         med_diag%INT_ZME%dgsave = .FALSE. 
     1920      ENDIF 
     1921      IF (iom_use("INT_DET")) THEN  
     1922         med_diag%INT_DET%dgsave = .TRUE. 
     1923      ELSE  
     1924         med_diag%INT_DET%dgsave = .FALSE. 
     1925      ENDIF 
     1926      IF (iom_use("INT_DTC")) THEN  
     1927         med_diag%INT_DTC%dgsave = .TRUE. 
     1928      ELSE  
     1929         med_diag%INT_DTC%dgsave = .FALSE. 
     1930      ENDIF 
     1931      IF (iom_use("DMS_SURF")) THEN  
     1932         med_diag%DMS_SURF%dgsave = .TRUE. 
     1933      ELSE  
     1934         med_diag%DMS_SURF%dgsave = .FALSE. 
     1935      ENDIF 
     1936      IF (iom_use("DMS_ANDR")) THEN  
     1937         med_diag%DMS_ANDR%dgsave = .TRUE. 
     1938      ELSE  
     1939         med_diag%DMS_ANDR%dgsave = .FALSE. 
     1940      ENDIF 
     1941      IF (iom_use("DMS_SIMO")) THEN  
     1942         med_diag%DMS_SIMO%dgsave = .TRUE. 
     1943      ELSE  
     1944         med_diag%DMS_SIMO%dgsave = .FALSE. 
     1945      ENDIF 
     1946      IF (iom_use("DMS_ARAN")) THEN  
     1947         med_diag%DMS_ARAN%dgsave = .TRUE. 
     1948      ELSE  
     1949         med_diag%DMS_ARAN%dgsave = .FALSE. 
     1950      ENDIF 
     1951      IF (iom_use("DMS_HALL")) THEN  
     1952         med_diag%DMS_HALL%dgsave = .TRUE. 
     1953      ELSE  
     1954         med_diag%DMS_HALL%dgsave = .FALSE. 
     1955      ENDIF 
     1956      IF (iom_use("ATM_XCO2")) THEN  
     1957         med_diag%ATM_XCO2%dgsave = .TRUE. 
     1958      ELSE  
     1959         med_diag%ATM_XCO2%dgsave = .FALSE. 
     1960      ENDIF 
     1961      IF (iom_use("OCN_FCO2")) THEN  
     1962         med_diag%OCN_FCO2%dgsave = .TRUE. 
     1963      ELSE  
     1964         med_diag%OCN_FCO2%dgsave = .FALSE. 
     1965      ENDIF 
     1966      IF (iom_use("ATM_FCO2")) THEN  
     1967         med_diag%ATM_FCO2%dgsave = .TRUE. 
     1968      ELSE  
     1969         med_diag%ATM_FCO2%dgsave = .FALSE. 
     1970      ENDIF 
     1971      IF (iom_use("OCN_RHOSW")) THEN  
     1972         med_diag%OCN_RHOSW%dgsave = .TRUE. 
     1973      ELSE  
     1974         med_diag%OCN_RHOSW%dgsave = .FALSE. 
     1975      ENDIF 
     1976      IF (iom_use("OCN_SCHCO2")) THEN  
     1977         med_diag%OCN_SCHCO2%dgsave = .TRUE. 
     1978      ELSE  
     1979         med_diag%OCN_SCHCO2%dgsave = .FALSE. 
     1980      ENDIF 
     1981      IF (iom_use("OCN_KWCO2")) THEN  
     1982         med_diag%OCN_KWCO2%dgsave = .TRUE. 
     1983      ELSE  
     1984         med_diag%OCN_KWCO2%dgsave = .FALSE. 
     1985      ENDIF 
     1986      IF (iom_use("OCN_K0")) THEN  
     1987         med_diag%OCN_K0%dgsave = .TRUE. 
     1988      ELSE  
     1989         med_diag%OCN_K0%dgsave = .FALSE. 
     1990      ENDIF 
     1991      IF (iom_use("CO2STARAIR")) THEN  
     1992         med_diag%CO2STARAIR%dgsave = .TRUE. 
     1993      ELSE  
     1994         med_diag%CO2STARAIR%dgsave = .FALSE. 
     1995      ENDIF 
     1996      IF (iom_use("OCN_DPCO2")) THEN  
     1997         med_diag%OCN_DPCO2%dgsave = .TRUE. 
     1998      ELSE  
     1999         med_diag%OCN_DPCO2%dgsave = .FALSE. 
    21412000      ENDIF 
    21422001      !! 
    2143       IF  (iom_use("TPP3")) THEN  
    2144           med_diag%TPP3%dgsave = .TRUE. 
    2145       ELSE  
    2146           med_diag%TPP3%dgsave = .FALSE. 
    2147       ENDIF 
    2148       IF  (iom_use("DETFLUX3")) THEN  
    2149           med_diag%DETFLUX3%dgsave = .TRUE. 
    2150       ELSE  
    2151           med_diag%DETFLUX3%dgsave = .FALSE. 
    2152       ENDIF 
    2153       IF  (iom_use("REMIN3N")) THEN  
    2154           med_diag%REMIN3N%dgsave = .TRUE. 
    2155       ELSE  
    2156           med_diag%REMIN3N%dgsave = .FALSE. 
    2157       ENDIF 
    2158       IF  (iom_use("PH3")) THEN  
    2159           med_diag%PH3%dgsave = .TRUE. 
    2160       ELSE  
    2161           med_diag%PH3%dgsave = .FALSE. 
    2162       ENDIF 
    2163       IF  (iom_use("OM_CAL3")) THEN  
    2164           med_diag%OM_CAL3%dgsave = .TRUE. 
    2165       ELSE  
    2166           med_diag%OM_CAL3%dgsave = .FALSE. 
     2002      !! 3D fields 
     2003      IF (iom_use("TPP3")) THEN  
     2004         med_diag%TPP3%dgsave = .TRUE. 
     2005      ELSE  
     2006         med_diag%TPP3%dgsave = .FALSE. 
     2007      ENDIF 
     2008      IF (iom_use("DETFLUX3")) THEN  
     2009         med_diag%DETFLUX3%dgsave = .TRUE. 
     2010      ELSE  
     2011         med_diag%DETFLUX3%dgsave = .FALSE. 
     2012      ENDIF 
     2013      IF (iom_use("REMIN3N")) THEN  
     2014         med_diag%REMIN3N%dgsave = .TRUE. 
     2015      ELSE  
     2016         med_diag%REMIN3N%dgsave = .FALSE. 
     2017      ENDIF 
     2018      IF (iom_use("PH3")) THEN  
     2019         med_diag%PH3%dgsave = .TRUE. 
     2020      ELSE  
     2021         med_diag%PH3%dgsave = .FALSE. 
     2022      ENDIF 
     2023      IF (iom_use("OM_CAL3")) THEN  
     2024         med_diag%OM_CAL3%dgsave = .TRUE. 
     2025      ELSE  
     2026         med_diag%OM_CAL3%dgsave = .FALSE. 
    21672027      ENDIF 
    21682028      !! 
     
    21722032      !! 
    21732033      !! 2D fields 
    2174       IF  (iom_use("epC100")) THEN  
    2175           med_diag%epC100%dgsave = .TRUE. 
    2176       ELSE  
    2177           med_diag%epC100%dgsave = .FALSE. 
    2178       ENDIF 
    2179       IF  (iom_use("epCALC100")) THEN  
    2180           med_diag%epCALC100%dgsave = .TRUE. 
    2181       ELSE  
    2182           med_diag%epCALC100%dgsave = .FALSE. 
    2183       ENDIF 
    2184       IF  (iom_use("epN100")) THEN  
    2185           med_diag%epN100%dgsave = .TRUE. 
    2186       ELSE  
    2187           med_diag%epN100%dgsave = .FALSE. 
    2188       ENDIF 
    2189       IF  (iom_use("epSI100")) THEN  
    2190           med_diag%epSI100%dgsave = .TRUE. 
    2191       ELSE  
    2192           med_diag%epSI100%dgsave = .FALSE. 
    2193       ENDIF 
    2194       IF  (iom_use("FGCO2")) THEN  
    2195           med_diag%FGCO2%dgsave = .TRUE. 
    2196       ELSE  
    2197           med_diag%FGCO2%dgsave = .FALSE. 
    2198       ENDIF 
    2199       IF  (iom_use("INTDISSIC")) THEN  
    2200           med_diag%INTDISSIC%dgsave = .TRUE. 
    2201       ELSE  
    2202           med_diag%INTDISSIC%dgsave = .FALSE. 
    2203       ENDIF 
    2204       IF  (iom_use("INTDISSIN")) THEN  
    2205           med_diag%INTDISSIN%dgsave = .TRUE. 
    2206       ELSE  
    2207           med_diag%INTDISSIN%dgsave = .FALSE. 
    2208       ENDIF 
    2209       IF  (iom_use("INTDISSISI")) THEN  
    2210           med_diag%INTDISSISI%dgsave = .TRUE. 
    2211       ELSE  
    2212           med_diag%INTDISSISI%dgsave = .FALSE. 
    2213       ENDIF 
    2214       IF  (iom_use("INTTALK")) THEN  
    2215           med_diag%INTTALK%dgsave = .TRUE. 
    2216       ELSE  
    2217           med_diag%INTTALK%dgsave = .FALSE. 
    2218       ENDIF 
    2219       IF  (iom_use("O2min")) THEN  
    2220           med_diag%O2min%dgsave = .TRUE. 
    2221       ELSE  
    2222           med_diag%O2min%dgsave = .FALSE. 
    2223       ENDIF 
    2224       IF  (iom_use("ZO2min")) THEN  
    2225           med_diag%ZO2min%dgsave = .TRUE. 
    2226       ELSE  
    2227           med_diag%ZO2min%dgsave = .FALSE. 
    2228       ENDIF 
    2229       IF  (iom_use("FBDDTALK")) THEN  
    2230           med_diag%FBDDTALK%dgsave = .TRUE. 
    2231       ELSE  
    2232           med_diag%FBDDTALK%dgsave = .FALSE. 
    2233       ENDIF 
    2234       IF  (iom_use("FBDDTDIC")) THEN  
    2235           med_diag%FBDDTDIC%dgsave = .TRUE. 
    2236       ELSE  
    2237           med_diag%FBDDTDIC%dgsave = .FALSE. 
    2238       ENDIF 
    2239       IF  (iom_use("FBDDTDIFE")) THEN  
    2240           med_diag%FBDDTDIFE%dgsave = .TRUE. 
    2241       ELSE  
    2242           med_diag%FBDDTDIFE%dgsave = .FALSE. 
    2243       ENDIF 
    2244       IF  (iom_use("FBDDTDIN")) THEN  
    2245           med_diag%FBDDTDIN%dgsave = .TRUE. 
    2246       ELSE  
    2247           med_diag%FBDDTDIN%dgsave = .FALSE. 
    2248       ENDIF 
    2249       IF  (iom_use("FBDDTDISI")) THEN  
    2250           med_diag%FBDDTDISI%dgsave = .TRUE. 
    2251       ELSE  
    2252           med_diag%FBDDTDISI%dgsave = .FALSE. 
     2034      IF (iom_use("epC100")) THEN  
     2035         med_diag%epC100%dgsave = .TRUE. 
     2036      ELSE  
     2037         med_diag%epC100%dgsave = .FALSE. 
     2038      ENDIF 
     2039      IF (iom_use("epCALC100")) THEN  
     2040         med_diag%epCALC100%dgsave = .TRUE. 
     2041      ELSE  
     2042         med_diag%epCALC100%dgsave = .FALSE. 
     2043      ENDIF 
     2044      IF (iom_use("epN100")) THEN  
     2045         med_diag%epN100%dgsave = .TRUE. 
     2046      ELSE  
     2047         med_diag%epN100%dgsave = .FALSE. 
     2048      ENDIF 
     2049      IF (iom_use("epSI100")) THEN  
     2050         med_diag%epSI100%dgsave = .TRUE. 
     2051      ELSE  
     2052         med_diag%epSI100%dgsave = .FALSE. 
     2053      ENDIF 
     2054      IF (iom_use("FGCO2")) THEN  
     2055         med_diag%FGCO2%dgsave = .TRUE. 
     2056      ELSE  
     2057         med_diag%FGCO2%dgsave = .FALSE. 
     2058      ENDIF 
     2059      IF (iom_use("INTDISSIC")) THEN  
     2060         med_diag%INTDISSIC%dgsave = .TRUE. 
     2061      ELSE  
     2062         med_diag%INTDISSIC%dgsave = .FALSE. 
     2063      ENDIF 
     2064      IF (iom_use("INTDISSIN")) THEN  
     2065         med_diag%INTDISSIN%dgsave = .TRUE. 
     2066      ELSE  
     2067         med_diag%INTDISSIN%dgsave = .FALSE. 
     2068      ENDIF 
     2069      IF (iom_use("INTDISSISI")) THEN  
     2070         med_diag%INTDISSISI%dgsave = .TRUE. 
     2071      ELSE  
     2072         med_diag%INTDISSISI%dgsave = .FALSE. 
     2073      ENDIF 
     2074      IF (iom_use("INTTALK")) THEN  
     2075         med_diag%INTTALK%dgsave = .TRUE. 
     2076      ELSE  
     2077         med_diag%INTTALK%dgsave = .FALSE. 
     2078      ENDIF 
     2079      IF (iom_use("O2min")) THEN  
     2080         med_diag%O2min%dgsave = .TRUE. 
     2081      ELSE  
     2082         med_diag%O2min%dgsave = .FALSE. 
     2083      ENDIF 
     2084      IF (iom_use("ZO2min")) THEN  
     2085         med_diag%ZO2min%dgsave = .TRUE. 
     2086      ELSE  
     2087         med_diag%ZO2min%dgsave = .FALSE. 
     2088      ENDIF 
     2089      IF (iom_use("FBDDTALK")) THEN  
     2090         med_diag%FBDDTALK%dgsave = .TRUE. 
     2091      ELSE  
     2092         med_diag%FBDDTALK%dgsave = .FALSE. 
     2093      ENDIF 
     2094      IF (iom_use("FBDDTDIC")) THEN  
     2095         med_diag%FBDDTDIC%dgsave = .TRUE. 
     2096      ELSE  
     2097         med_diag%FBDDTDIC%dgsave = .FALSE. 
     2098      ENDIF 
     2099      IF (iom_use("FBDDTDIFE")) THEN  
     2100         med_diag%FBDDTDIFE%dgsave = .TRUE. 
     2101      ELSE  
     2102         med_diag%FBDDTDIFE%dgsave = .FALSE. 
     2103      ENDIF 
     2104      IF (iom_use("FBDDTDIN")) THEN  
     2105         med_diag%FBDDTDIN%dgsave = .TRUE. 
     2106      ELSE  
     2107         med_diag%FBDDTDIN%dgsave = .FALSE. 
     2108      ENDIF 
     2109      IF (iom_use("FBDDTDISI")) THEN  
     2110         med_diag%FBDDTDISI%dgsave = .TRUE. 
     2111      ELSE  
     2112         med_diag%FBDDTDISI%dgsave = .FALSE. 
    22532113      ENDIF 
    22542114      !! 
    2255       !! 3D 
    2256       IF  (iom_use("TPPD3")) THEN  
    2257           med_diag%TPPD3%dgsave = .TRUE. 
    2258       ELSE  
    2259           med_diag%TPPD3%dgsave = .FALSE. 
    2260       ENDIF 
    2261       IF  (iom_use("BDDTALK3")) THEN  
    2262           med_diag%BDDTALK3%dgsave = .TRUE. 
    2263       ELSE  
    2264           med_diag%BDDTALK3%dgsave = .FALSE. 
    2265       ENDIF 
    2266       IF  (iom_use("BDDTDIC3")) THEN  
    2267           med_diag%BDDTDIC3%dgsave = .TRUE. 
    2268       ELSE  
    2269           med_diag%BDDTDIC3%dgsave = .FALSE. 
    2270       ENDIF 
    2271       IF  (iom_use("BDDTDIFE3")) THEN  
    2272           med_diag%BDDTDIFE3%dgsave = .TRUE. 
    2273       ELSE  
    2274           med_diag%BDDTDIFE3%dgsave = .FALSE. 
    2275       ENDIF 
    2276       IF  (iom_use("BDDTDIN3")) THEN  
    2277           med_diag%BDDTDIN3%dgsave = .TRUE. 
    2278       ELSE  
    2279           med_diag%BDDTDIN3%dgsave = .FALSE. 
    2280       ENDIF 
    2281       IF  (iom_use("BDDTDISI3")) THEN  
    2282           med_diag%BDDTDISI3%dgsave = .TRUE. 
    2283       ELSE  
    2284           med_diag%BDDTDISI3%dgsave = .FALSE. 
    2285       ENDIF 
    2286       IF  (iom_use("FD_NIT3")) THEN  
    2287           med_diag%FD_NIT3%dgsave = .TRUE. 
    2288       ELSE  
    2289           med_diag%FD_NIT3%dgsave = .FALSE. 
    2290       ENDIF 
    2291       IF  (iom_use("FD_SIL3")) THEN  
    2292           med_diag%FD_SIL3%dgsave = .TRUE. 
    2293       ELSE  
    2294           med_diag%FD_SIL3%dgsave = .FALSE. 
    2295       ENDIF 
    2296       IF  (iom_use("FD_CAR3")) THEN  
    2297           med_diag%FD_CAR3%dgsave = .TRUE. 
    2298       ELSE  
    2299           med_diag%FD_CAR3%dgsave = .FALSE. 
    2300       ENDIF 
    2301       IF  (iom_use("FD_CAL3")) THEN  
    2302           med_diag%FD_CAL3%dgsave = .TRUE. 
    2303       ELSE  
    2304           med_diag%FD_CAL3%dgsave = .FALSE. 
    2305       ENDIF 
    2306       IF  (iom_use("CO33")) THEN  
    2307           med_diag%CO33%dgsave = .TRUE. 
    2308       ELSE  
    2309           med_diag%CO33%dgsave = .FALSE. 
    2310       ENDIF 
    2311       IF  (iom_use("CO3SATARAG3")) THEN  
    2312           med_diag%CO3SATARAG3%dgsave = .TRUE. 
    2313       ELSE  
    2314           med_diag%CO3SATARAG3%dgsave = .FALSE. 
    2315       ENDIF 
    2316       IF  (iom_use("CO3SATCALC3")) THEN  
    2317           med_diag%CO3SATCALC3%dgsave = .TRUE. 
    2318       ELSE  
    2319           med_diag%CO3SATCALC3%dgsave = .FALSE. 
    2320       ENDIF 
    2321       IF  (iom_use("DCALC3")) THEN  
    2322           med_diag%DCALC3%dgsave = .TRUE. 
    2323       ELSE  
    2324           med_diag%DCALC3%dgsave = .FALSE. 
    2325       ENDIF 
    2326       IF  (iom_use("EXPC3")) THEN  
    2327           med_diag%EXPC3%dgsave = .TRUE. 
    2328       ELSE  
    2329           med_diag%EXPC3%dgsave = .FALSE. 
    2330       ENDIF 
    2331       IF  (iom_use("EXPN3")) THEN  
    2332           med_diag%EXPN3%dgsave = .TRUE. 
    2333       ELSE  
    2334           med_diag%EXPN3%dgsave = .FALSE. 
    2335       ENDIF 
    2336       IF  (iom_use("FEDISS3")) THEN  
    2337           med_diag%FEDISS3%dgsave = .TRUE. 
    2338       ELSE  
    2339           med_diag%FEDISS3%dgsave = .FALSE. 
    2340       ENDIF 
    2341       IF  (iom_use("FESCAV3")) THEN  
    2342           med_diag%FESCAV3%dgsave = .TRUE. 
    2343       ELSE  
    2344           med_diag%FESCAV3%dgsave = .FALSE. 
    2345       ENDIF 
    2346       IF  (iom_use("MIGRAZP3")) THEN  
    2347           med_diag%MIGRAZP3%dgsave = .TRUE. 
    2348       ELSE  
    2349           med_diag%MIGRAZP3%dgsave = .FALSE. 
    2350       ENDIF 
    2351       IF  (iom_use("MIGRAZD3")) THEN  
    2352           med_diag%MIGRAZD3%dgsave = .TRUE. 
    2353       ELSE  
    2354           med_diag%MIGRAZD3%dgsave = .FALSE. 
    2355       ENDIF 
    2356       IF  (iom_use("MEGRAZP3")) THEN  
    2357           med_diag%MEGRAZP3%dgsave = .TRUE. 
    2358       ELSE  
    2359           med_diag%MEGRAZP3%dgsave = .FALSE. 
    2360       ENDIF 
    2361       IF  (iom_use("MEGRAZD3")) THEN  
    2362           med_diag%MEGRAZD3%dgsave = .TRUE. 
    2363       ELSE  
    2364           med_diag%MEGRAZD3%dgsave = .FALSE. 
    2365       ENDIF 
    2366       IF  (iom_use("MEGRAZZ3")) THEN  
    2367           med_diag%MEGRAZZ3%dgsave = .TRUE. 
    2368       ELSE  
    2369           med_diag%MEGRAZZ3%dgsave = .FALSE. 
    2370       ENDIF 
    2371       IF  (iom_use("O2SAT3")) THEN  
    2372           med_diag%O2SAT3%dgsave = .TRUE. 
    2373       ELSE  
    2374           med_diag%O2SAT3%dgsave = .FALSE. 
    2375       ENDIF 
    2376       IF  (iom_use("PBSI3")) THEN  
    2377           med_diag%PBSI3%dgsave = .TRUE. 
    2378       ELSE  
    2379           med_diag%PBSI3%dgsave = .FALSE. 
    2380       ENDIF 
    2381       IF  (iom_use("PCAL3")) THEN  
    2382           med_diag%PCAL3%dgsave = .TRUE. 
    2383       ELSE  
    2384           med_diag%PCAL3%dgsave = .FALSE. 
    2385       ENDIF 
    2386       IF  (iom_use("REMOC3")) THEN  
    2387           med_diag%REMOC3%dgsave = .TRUE. 
    2388       ELSE  
    2389           med_diag%REMOC3%dgsave = .FALSE. 
    2390       ENDIF 
    2391       IF  (iom_use("PNLIMJ3")) THEN  
    2392           med_diag%PNLIMJ3%dgsave = .TRUE. 
    2393       ELSE  
    2394           med_diag%PNLIMJ3%dgsave = .FALSE. 
    2395       ENDIF 
    2396       IF  (iom_use("PNLIMN3")) THEN  
    2397           med_diag%PNLIMN3%dgsave = .TRUE. 
    2398       ELSE  
    2399           med_diag%PNLIMN3%dgsave = .FALSE. 
    2400       ENDIF 
    2401       IF  (iom_use("PNLIMFE3")) THEN  
    2402           med_diag%PNLIMFE3%dgsave = .TRUE. 
    2403       ELSE  
    2404           med_diag%PNLIMFE3%dgsave = .FALSE. 
    2405       ENDIF 
    2406       IF  (iom_use("PDLIMJ3")) THEN  
    2407           med_diag%PDLIMJ3%dgsave = .TRUE. 
    2408       ELSE  
    2409           med_diag%PDLIMJ3%dgsave = .FALSE. 
    2410       ENDIF 
    2411       IF  (iom_use("PDLIMN3")) THEN  
    2412           med_diag%PDLIMN3%dgsave = .TRUE. 
    2413       ELSE  
    2414           med_diag%PDLIMN3%dgsave = .FALSE. 
    2415       ENDIF 
    2416       IF  (iom_use("PDLIMFE3")) THEN  
    2417           med_diag%PDLIMFE3%dgsave = .TRUE. 
    2418       ELSE  
    2419           med_diag%PDLIMFE3%dgsave = .FALSE. 
    2420       ENDIF 
    2421       IF  (iom_use("PDLIMSI3")) THEN  
    2422           med_diag%PDLIMSI3%dgsave = .TRUE. 
    2423       ELSE  
    2424           med_diag%PDLIMSI3%dgsave = .FALSE. 
    2425       ENDIF 
    2426  
     2115      !! 3D fields 
     2116      IF (iom_use("TPPD3")) THEN  
     2117         med_diag%TPPD3%dgsave = .TRUE. 
     2118      ELSE  
     2119         med_diag%TPPD3%dgsave = .FALSE. 
     2120      ENDIF 
     2121      IF (iom_use("BDDTALK3")) THEN  
     2122         med_diag%BDDTALK3%dgsave = .TRUE. 
     2123      ELSE  
     2124         med_diag%BDDTALK3%dgsave = .FALSE. 
     2125      ENDIF 
     2126      IF (iom_use("BDDTDIC3")) THEN  
     2127         med_diag%BDDTDIC3%dgsave = .TRUE. 
     2128      ELSE  
     2129         med_diag%BDDTDIC3%dgsave = .FALSE. 
     2130      ENDIF 
     2131      IF (iom_use("BDDTDIFE3")) THEN  
     2132         med_diag%BDDTDIFE3%dgsave = .TRUE. 
     2133      ELSE  
     2134         med_diag%BDDTDIFE3%dgsave = .FALSE. 
     2135      ENDIF 
     2136      IF (iom_use("BDDTDIN3")) THEN  
     2137         med_diag%BDDTDIN3%dgsave = .TRUE. 
     2138      ELSE  
     2139         med_diag%BDDTDIN3%dgsave = .FALSE. 
     2140      ENDIF 
     2141      IF (iom_use("BDDTDISI3")) THEN  
     2142         med_diag%BDDTDISI3%dgsave = .TRUE. 
     2143      ELSE  
     2144         med_diag%BDDTDISI3%dgsave = .FALSE. 
     2145      ENDIF 
     2146      IF (iom_use("FD_NIT3")) THEN  
     2147         med_diag%FD_NIT3%dgsave = .TRUE. 
     2148      ELSE  
     2149         med_diag%FD_NIT3%dgsave = .FALSE. 
     2150      ENDIF 
     2151      IF (iom_use("FD_SIL3")) THEN  
     2152         med_diag%FD_SIL3%dgsave = .TRUE. 
     2153      ELSE  
     2154         med_diag%FD_SIL3%dgsave = .FALSE. 
     2155      ENDIF 
     2156      IF (iom_use("FD_CAR3")) THEN  
     2157         med_diag%FD_CAR3%dgsave = .TRUE. 
     2158      ELSE  
     2159         med_diag%FD_CAR3%dgsave = .FALSE. 
     2160      ENDIF 
     2161      IF (iom_use("FD_CAL3")) THEN  
     2162         med_diag%FD_CAL3%dgsave = .TRUE. 
     2163      ELSE  
     2164         med_diag%FD_CAL3%dgsave = .FALSE. 
     2165      ENDIF 
     2166      IF (iom_use("CO33")) THEN  
     2167         med_diag%CO33%dgsave = .TRUE. 
     2168      ELSE  
     2169         med_diag%CO33%dgsave = .FALSE. 
     2170      ENDIF 
     2171      IF (iom_use("CO3SATARAG3")) THEN  
     2172         med_diag%CO3SATARAG3%dgsave = .TRUE. 
     2173      ELSE  
     2174         med_diag%CO3SATARAG3%dgsave = .FALSE. 
     2175      ENDIF 
     2176      IF (iom_use("CO3SATCALC3")) THEN  
     2177         med_diag%CO3SATCALC3%dgsave = .TRUE. 
     2178      ELSE  
     2179         med_diag%CO3SATCALC3%dgsave = .FALSE. 
     2180      ENDIF 
     2181      IF (iom_use("DCALC3")) THEN  
     2182         med_diag%DCALC3%dgsave = .TRUE. 
     2183      ELSE  
     2184         med_diag%DCALC3%dgsave = .FALSE. 
     2185      ENDIF 
     2186      IF (iom_use("EXPC3")) THEN  
     2187         med_diag%EXPC3%dgsave = .TRUE. 
     2188      ELSE  
     2189         med_diag%EXPC3%dgsave = .FALSE. 
     2190      ENDIF 
     2191      IF (iom_use("EXPN3")) THEN  
     2192         med_diag%EXPN3%dgsave = .TRUE. 
     2193      ELSE  
     2194         med_diag%EXPN3%dgsave = .FALSE. 
     2195      ENDIF 
     2196      IF (iom_use("FEDISS3")) THEN  
     2197         med_diag%FEDISS3%dgsave = .TRUE. 
     2198      ELSE  
     2199         med_diag%FEDISS3%dgsave = .FALSE. 
     2200      ENDIF 
     2201      IF (iom_use("FESCAV3")) THEN  
     2202         med_diag%FESCAV3%dgsave = .TRUE. 
     2203      ELSE  
     2204         med_diag%FESCAV3%dgsave = .FALSE. 
     2205      ENDIF 
     2206      IF (iom_use("MIGRAZP3")) THEN  
     2207         med_diag%MIGRAZP3%dgsave = .TRUE. 
     2208      ELSE  
     2209         med_diag%MIGRAZP3%dgsave = .FALSE. 
     2210      ENDIF 
     2211      IF (iom_use("MIGRAZD3")) THEN  
     2212         med_diag%MIGRAZD3%dgsave = .TRUE. 
     2213      ELSE  
     2214         med_diag%MIGRAZD3%dgsave = .FALSE. 
     2215      ENDIF 
     2216      IF (iom_use("MEGRAZP3")) THEN  
     2217         med_diag%MEGRAZP3%dgsave = .TRUE. 
     2218      ELSE  
     2219         med_diag%MEGRAZP3%dgsave = .FALSE. 
     2220      ENDIF 
     2221      IF (iom_use("MEGRAZD3")) THEN  
     2222         med_diag%MEGRAZD3%dgsave = .TRUE. 
     2223      ELSE  
     2224         med_diag%MEGRAZD3%dgsave = .FALSE. 
     2225      ENDIF 
     2226      IF (iom_use("MEGRAZZ3")) THEN  
     2227         med_diag%MEGRAZZ3%dgsave = .TRUE. 
     2228      ELSE  
     2229         med_diag%MEGRAZZ3%dgsave = .FALSE. 
     2230      ENDIF 
     2231      IF (iom_use("O2SAT3")) THEN  
     2232         med_diag%O2SAT3%dgsave = .TRUE. 
     2233      ELSE  
     2234         med_diag%O2SAT3%dgsave = .FALSE. 
     2235      ENDIF 
     2236      IF (iom_use("PBSI3")) THEN  
     2237         med_diag%PBSI3%dgsave = .TRUE. 
     2238      ELSE  
     2239         med_diag%PBSI3%dgsave = .FALSE. 
     2240      ENDIF 
     2241      IF (iom_use("PCAL3")) THEN  
     2242         med_diag%PCAL3%dgsave = .TRUE. 
     2243      ELSE  
     2244         med_diag%PCAL3%dgsave = .FALSE. 
     2245      ENDIF 
     2246      IF (iom_use("REMOC3")) THEN  
     2247         med_diag%REMOC3%dgsave = .TRUE. 
     2248      ELSE  
     2249         med_diag%REMOC3%dgsave = .FALSE. 
     2250      ENDIF 
     2251      IF (iom_use("PNLIMJ3")) THEN  
     2252         med_diag%PNLIMJ3%dgsave = .TRUE. 
     2253      ELSE  
     2254         med_diag%PNLIMJ3%dgsave = .FALSE. 
     2255      ENDIF 
     2256      IF (iom_use("PNLIMN3")) THEN  
     2257         med_diag%PNLIMN3%dgsave = .TRUE. 
     2258      ELSE  
     2259         med_diag%PNLIMN3%dgsave = .FALSE. 
     2260      ENDIF 
     2261      IF (iom_use("PNLIMFE3")) THEN  
     2262         med_diag%PNLIMFE3%dgsave = .TRUE. 
     2263      ELSE  
     2264         med_diag%PNLIMFE3%dgsave = .FALSE. 
     2265      ENDIF 
     2266      IF (iom_use("PDLIMJ3")) THEN  
     2267         med_diag%PDLIMJ3%dgsave = .TRUE. 
     2268      ELSE  
     2269         med_diag%PDLIMJ3%dgsave = .FALSE. 
     2270      ENDIF 
     2271      IF (iom_use("PDLIMN3")) THEN  
     2272         med_diag%PDLIMN3%dgsave = .TRUE. 
     2273      ELSE  
     2274         med_diag%PDLIMN3%dgsave = .FALSE. 
     2275      ENDIF 
     2276      IF (iom_use("PDLIMFE3")) THEN  
     2277         med_diag%PDLIMFE3%dgsave = .TRUE. 
     2278      ELSE  
     2279         med_diag%PDLIMFE3%dgsave = .FALSE. 
     2280      ENDIF 
     2281      IF (iom_use("PDLIMSI3")) THEN  
     2282         med_diag%PDLIMSI3%dgsave = .TRUE. 
     2283      ELSE  
     2284         med_diag%PDLIMSI3%dgsave = .FALSE. 
     2285      ENDIF 
     2286       
    24272287   END SUBROUTINE   trc_nam_iom_medusa 
    24282288    
  • branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcopt_medusa.F90

    r7766 r7894  
    1212   !!              -   !  2008-11  (A. Yool) continuing adaptation for MEDUSA 
    1313   !!              -   !  2010-03  (A. Yool) updated for branch inclusion 
     14   !!              -   !  2014-08  (A. Yool) correct 1% light level calculation 
     15   !!              -   !  2015-07  (A. Yool) updated for temporal averaging 
     16   !!              -   !  2017-03  (Jpalm) correct euphotic layer  
    1417   !!---------------------------------------------------------------------- 
    1518#if defined key_medusa 
  • branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcsed_medusa.F90

    r7766 r7894  
    9090      !!              add this trend now to the general trend of tracer (ta,sa,tra): 
    9191      !!                             tra = tra + dz(trn wn) 
    92       !!         
    93       !!              IF 'key_trc_diabio' is defined, the now vertical advection 
    94       !!              trend of passive tracers is saved for futher diagnostics. 
    9592      !!--------------------------------------------------------------------- 
    9693      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index       
     
    140137      ! for detrital nitrogen sedimentation only - jpdet 
    141138      zwork(:,:,1  ) = 0.e0      ! surface value set to zero 
    142       !!    DO ji = 1, jpi 
    143       !!       zirondep(ji,jj,1) = (dustsolub * dust(ji,jj) / (55.85 * rmtss) + 3.e-10 / ryyss) & 
    144       !!       & * rfact2 / fse3t(ji,jj,1) 
    145       !!       zsidep  (ji,jj)   = 8.8 * 0.075 * dust(ji,jj) * rfact2 / & 
    146       !!       & (fse3t(ji,jj,1) * 28.1 * rmtss) 
    147       !!    END DO 
    148       !! END DO 
    149  
    150       ! sedimentation of detrital nitrogen : upstream scheme 
    151       ! ---------------------------------------------------- 
    152       ! 
    153       zwork(:,:,:) = 0.e0        ! initialisation of sinking variable 
    154       ! for detrital nitrogen sedimentation only - jpdet 
    155       zwork(:,:,1  ) = 0.e0      ! surface value set to zero 
    156139      zwork(:,:,jpk) = 0.e0      ! bottom value  set to zero 
    157140      ! 
     
    161144         ! zwork(:,:,jk) = -vsed * max(trn(:,:,jk-1,jpdet),0.d0) * tmask(:,:,jk-1) 
    162145         zwork(:,:,jk) = -vsed * max(trn(:,:,jk-1,jpdet),0.) * tmask(:,:,jk-1) 
    163          ! 
    164          ! AXY (16/01/14): stop sinking in upper 10m to reduce model instability  
    165          !                 in shallower grid cells 
    166          ! if ( jk .lt. 9 ) zwork(:,:,jk) = 0.e0 
    167146      END DO 
    168147      ! 
     
    173152               ztra  = - ( zwork(ji,jj,jk) - zwork(ji,jj,jk+1) ) / fse3t(ji,jj,jk) 
    174153               tra(ji,jj,jk,jpdet) = tra(ji,jj,jk,jpdet) + ztra 
    175 # if defined key_trc_diabio 
    176                trbio(ji,jj,jk,8) = ztra 
    177 # endif 
    178154               IF (lk_iomput .AND. .NOT. ln_diatrc) THEN 
    179155                     IF( med_diag%DSED%dgsave ) THEN 
    180156                         zw2d(ji,jj) = zw2d(ji,jj) + ztra * fse3t(ji,jj,jk) * 86400. 
    181157                      ENDIF    
    182                ELSE IF( ln_diatrc )  THEN 
    183                     trc2d(ji,jj,8) = trc2d(ji,jj,8) + ztra * fse3t(ji,jj,jk) * 86400. 
    184158               ENDIF     
    185159                 
     
    188162      END DO 
    189163      ! 
    190 # if defined key_trc_diabio 
    191       CALL lbc_lnk (trbio(:,:,1,8), 'T', 1. )                    ! Lateral boundary conditions on trcbio 
    192 # endif 
    193       IF( ln_diatrc ) CALL lbc_lnk( trc2d(:,:,8), 'T', 1. )      ! Lateral boundary conditions on trc2d 
    194       !! 
    195164      IF (lk_iomput .AND. .NOT. ln_diatrc) THEN 
    196165           IF( med_diag%DSED%dgsave ) THEN 
     
    198167                CALL wrk_dealloc( jpi, jpj,    zw2d  ) 
    199168            ENDIF 
    200       ELSE IF (lk_iomput .AND. ln_diatrc)  THEN     
    201           CALL iom_put( "DSED",trc2d(:,:,8) ) 
    202169      ENDIF 
    203170      !! 
     
    217184         ! zwork(:,:,jk) = -vsed * max(trn(:,:,jk-1,jpdtc),0.d0) * tmask(:,:,jk-1) 
    218185         zwork(:,:,jk) = -vsed * max(trn(:,:,jk-1,jpdtc),0.) * tmask(:,:,jk-1) 
    219          ! 
    220          ! AXY (16/01/14): stop sinking in upper 10m to reduce model instability  
    221          !                 in shallower grid cells 
    222          ! if ( jk .lt. 9 ) zwork(:,:,jk) = 0.e0 
    223186      END DO 
    224187      ! 
     
    229192               ztra  = - ( zwork(ji,jj,jk) - zwork(ji,jj,jk+1) ) / fse3t(ji,jj,jk) 
    230193               tra(ji,jj,jk,jpdtc) = tra(ji,jj,jk,jpdtc) + ztra 
    231 !! #  if defined key_trc_diabio 
    232 !!                trbio(ji,jj,jk,8) = ztra 
    233 !! #  endif 
    234 !!             IF( ln_diatrc ) & 
    235 !!                &  trc2d(ji,jj,8) = trc2d(ji,jj,8) + ztra * fse3t(ji,jj,jk) * 86400. 
    236194            END DO 
    237195         END DO 
    238196      END DO 
    239197      ! 
    240 !! #  if defined key_trc_diabio 
    241 !!       CALL lbc_lnk (trbio(:,:,1,8), 'T', 1. )                    ! Lateral boundary conditions on trcbio 
    242 !! #  endif 
    243 !!       IF( ln_diatrc ) CALL lbc_lnk( trc2d(:,:,8), 'T', 1. )      ! Lateral boundary conditions on trc2d 
    244 !! #  if defined key_iomput 
    245 !!       CALL iom_put( "DSED",trc2d(:,:,8) ) 
    246 !! #  endif 
    247  
    248198# endif 
    249199 
     
    381331      ENDIF 
    382332 
    383       !! AXY (04/11/13): replace this with a call in trc_ini_medusa 
    384       !! AXY (25/02/10) 
    385       !! call routine for populating CCD array if this is the first time-step 
    386       !! IF( kt == nittrc000 ) CALL medusa_ccd( kt ) 
    387  
    388       !! AXY (04/11/13): replace this with a call in trc_ini_medusa 
    389       !! AXY (26/01/12) 
    390       !! call routine for populating river arrays if this is the first time-step 
    391       !! IF( kt == nittrc000 ) CALL medusa_river( kt ) 
    392  
    393       !! AXY (10/02/09) 
    394       !! IF( (jnt == 1) .and. (bdustfer) )  CALL trc_sed_medusa_sbc( kt ) 
    395  
    396       !! JPALM -- 31-03-2016 -- rewrite trc_sed_medusa_sbc. 
    397       !! IF (kt == nittrc000 ) CALL trc_sed_medusa_sbc  
    398  
    399       !! JPALM -- 20-07-2016 -- adapt dust forcing fields reading and conversion 
    400       !!                     To read dust dep in kg-dust/m2/s instead of g-Fe/m2/month  
    401       !!                     So all forcings and coupling dust dep are in the same SI units 
    402       !!                     and then convert in mmol-Fe/m2/day 
    403  
    404333      IF( bdustfer ) THEN 
    405334            CALL fld_read( kt, 1, sf_dust ) 
     
    414343      zirondep(:,:) = dust(:,:) * Fe_dust_mratio / xfe_mass * 1.e6 * 86400.  !! mmol-Fe/m2/d 
    415344       
    416       !! JPALM -- 20-07-2016 -- Zirondep and zsidep are not used. 
    417       !!                     So comment out the following lines. but keep them 
    418       !!                     as we may want to used them later on 
    419       !!================================================      
    420       !! 
    421       !! zirondep(:,:,:) = 0.e0     !! Initialisation of deposition variables 
    422       !! zsidep  (:,:)   = 0.e0 
    423       !! 
    424       !! Iron and Si deposition at the surface 
    425       !! ------------------------------------- 
    426       !! 
    427       !! DO jj = 1, jpj 
    428       !!    DO ji = 1, jpi 
    429       !!       zirondep(ji,jj,1) = (dustsolub * dust(ji,jj) / (55.85 * rmtss) + 3.e-10 / ryyss) & 
    430       !!       & * rfact2 / fse3t(ji,jj,1) 
    431       !!       zsidep  (ji,jj)   = 8.8 * 0.075 * dust(ji,jj) * rfact2 / & 
    432       !!       & (fse3t(ji,jj,1) * 28.1 * rmtss) 
    433       !!    END DO 
    434       !! END DO 
    435  
    436345   END SUBROUTINE trc_sed_medusa_dust 
    437346 
  • branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcsms_medusa.F90

    r7766 r7894  
    5959 
    6060      CALL trc_avg_medusa( kt ) ! rolling average module 
     61 
    6162# if defined key_debug_medusa 
    6263      IF(lwp) WRITE(numout,*) ' MEDUSA done trc_avg_medusa' 
     
    6566       
    6667      CALL trc_opt_medusa( kt ) ! optical model 
     68 
    6769# if defined key_debug_medusa 
    6870      IF(lwp) WRITE(numout,*) ' MEDUSA done trc_opt_medusa' 
     
    7274      !! AXY & JPALM (28/02/17): call dust before trc_bio_medusa (because of coupling) 
    7375      CALL trc_sed_medusa_dust( kt ) ! dust submodel 
     76 
    7477# if defined key_debug_medusa 
    7578      IF(lwp) WRITE(numout,*) ' MEDUSA done trc_sed_medusa_dust' 
     
    7881 
    7982# if defined key_kill_medusa 
     83 
    8084      !! MEDUSA skipped 
    8185      IF(lwp) WRITE(numout,*) ' MEDUSA killed at kt =', kt 
     
    8387# else 
    8488      CALL trc_bio_medusa( kt ) ! biological model 
     89 
    8590#  if defined key_debug_medusa 
    8691      IF(lwp) WRITE(numout,*) ' MEDUSA done trc_bio_medusa' 
     
    8994       
    9095      CALL trc_sed_medusa( kt ) ! sedimentation model 
     96 
    9197#  if defined key_debug_medusa 
    9298      IF(lwp) WRITE(numout,*) ' MEDUSA done trc_sed_medusa' 
    9399      CALL flush(numout) 
    94100#  endif 
     101 
    95102# endif 
    96103 
Note: See TracChangeset for help on using the changeset viewer.